我在一个OpenNETCF CompactFramework3.5移动设备应用程序中使用了.NET 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的截图。
请理解,对于单个实例的替代测试方法,我不感兴趣。谢谢。
发布于 2015-02-03 21:26:00
首先,快速查看签名数字和无符号数字(请随意使用桌面上的计算器来验证这些数字)。
3459667490在无符号十进制是0xCE365622中的32位十六进制.
-835299806在数字小数是0xCE365622在32位十六进制.
看到相似性了吗?
如果你这样做,无论是签名或无签名,我愿意打赌,100%的时间ID将匹配。
https://stackoverflow.com/questions/28287674
复制相似问题