Путаница с идентификатором процесса OpenNETCF
Я использую OpenNETCF 2.3 в приложении для мобильных устройств.NET Compact Framework 3.5. При запуске программы я ищу дубликаты запущенных экземпляров моего приложения. Я запутался, почему текущий 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.
Пожалуйста, поймите, что альтернативные методы тестирования для отдельных случаев меня не интересуют. Спасибо.
1 ответ
Во-первых, быстрый взгляд на числа со знаком и без знака (не стесняйтесь использовать калькулятор на рабочем столе, чтобы проверить их).
3459667490 в десятичном формате без знака - 0xCE365622 в 32-разрядном шестнадцатеричном формате.
-835299806 в десятичном формате со знаком - 0xCE365622 в шестнадцатеричном формате.
Видите сходство?
Если вы разыгрываете так, что оба подписаны или не подписаны, я готов поспорить, что 100% времени будут соответствовать идентификаторам.