【问题标题】:OpenNETCF Process ID ConfusionOpenNETCF 进程 ID 混淆
【发布时间】:2015-02-02 22:05:35
【问题描述】:

我在 .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 并且是负数?

我的代表太低,无法发布显示 p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806 的屏幕截图。

请理解,我对单个实例的替代测试方法不感兴趣。谢谢。

【问题讨论】:

  • 所以你想杀死每个相同PID并包含appName的proc?
  • 正确。我也想知道为什么当前进程ID有一半的时候返回不正确。
  • 如果您有多个进程实例正在运行,那么您会期望出现类似“p.ProcessID = 3459667490 和 intCurrentProcessID = -835299806”的内容,因为其中一个是新的例如,一个是旧的。并且拥有一个否定的进程 ID 并不重要,将其视为一个不透明的标识符。
  • 我同意,但是,我认为它不是有效的 PID。它不会出现在任何任务管理器中。此外,目前应用程序的先前实例在后台运行的可能性不大,因为测试代码仅检查 PID,显示一条消息,然后退出。在大约 50% 的 PID 不匹配的时间中,100% 的时间它们是有符号/负数。

标签: vb.net compact-framework opennetcf


【解决方案1】:

首先,快速查看有符号数和无符号数(请随意使用桌面上的计算器来验证这些数字)。

3459667490(无符号十进制)是 0xCE365622(32 位十六进制)。
带符号十进制的 -835299806 是 32 位十六进制的 0xCE365622

看到相似之处了吗?

如果你投的都是签名或未签名的,我愿意打赌 ID 100% 的时间都会匹配。

【讨论】:

  • 正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多