【发布时间】:2015-02-02 22:05:35
【问题描述】:
我在 .NET Compact Framework 3.5 移动设备应用程序中使用 OpenNETCF 2.3。在程序启动时,我正在寻找我的应用程序的重复运行实例。我很困惑为什么我从各种方法获得的当前 ProcessID 似乎有一半是不正确的。
Public Shared Sub Main()
Dim appName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name & ".exe"
Dim intCurrentProcessId As Integer = OpenNETCF.Diagnostics.ProcessHelper.GetCurrentProcessID
'Dim intCurrentProcessId As Integer = Process.GetCurrentProcess.Id()
For Each p As ToolHelp.ProcessEntry In ToolHelp.ProcessEntry.GetProcesses
If p.ProcessID <> intCurrentProcessId AndAlso p.ExeFile.Contains(appName) Then
MessageBox.Show("KILLING p.ExeFile: " & p.ExeFile & " p.processid: " & p.ProcessID & " intCurrentProcessId: " & intCurrentProcessId)
'p.Kill()
End If
Next
End Sub
为什么 intCurrentProcessId 似乎随机不匹配 p.ProcessId 并且是负数?
我的代表太低,无法发布显示 p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806 的屏幕截图。
请理解,我对单个实例的替代测试方法不感兴趣。谢谢。
【问题讨论】:
-
所以你想杀死每个不相同PID并包含appName的proc?
-
正确。我也想知道为什么当前进程ID有一半的时候返回不正确。
-
如果您有多个进程实例正在运行,那么您会期望出现类似“p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806”的内容,因为其中一个是新的例如,一个是旧的。并且拥有一个否定的进程 ID 并不重要,将其视为一个不透明的标识符。
-
我同意,但是,我认为它不是有效的 PID。它不会出现在任何任务管理器中。此外,目前应用程序的先前实例在后台运行的可能性不大,因为测试代码仅检查 PID,显示一条消息,然后退出。在大约 50% 的 PID 不匹配的时间中,100% 的时间它们是有符号/负数。
标签: vb.net compact-framework opennetcf