Путаница с идентификатором процесса 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% времени будут соответствовать идентификаторам.

Другие вопросы по тегам