OpenNETCF 进程 ID 混乱
OpenNETCF Process ID Confusion
我在 .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 并且是负数?
我的代表太低 post 显示 p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806 的屏幕截图。
请理解,我对测试单个实例的替代方法不感兴趣。谢谢。
首先,快速查看有符号数与无符号数(随意使用桌面上的计算器来验证这些)。
无符号十进制的 3459667490 是 32 位十六进制的 0xCE365622。
-835299806 有符号十进制是 0xCE365622 32 位十六进制。
看到相似之处了吗?
如果您进行强制转换,那么 ID 要么有符号,要么没有符号,我敢打赌 ID 将在 100% 的时间内匹配。
我在 .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 并且是负数?
我的代表太低 post 显示 p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806 的屏幕截图。
请理解,我对测试单个实例的替代方法不感兴趣。谢谢。
首先,快速查看有符号数与无符号数(随意使用桌面上的计算器来验证这些)。
无符号十进制的3459667490 是 32 位十六进制的 0xCE365622。
-835299806 有符号十进制是 0xCE365622 32 位十六进制。
看到相似之处了吗?
如果您进行强制转换,那么 ID 要么有符号,要么没有符号,我敢打赌 ID 将在 100% 的时间内匹配。