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% 的时间内匹配。