如何在Windows上唯一标识进程?

时间:2012-06-11 17:39:48

标签: windows process

我们以记事本为例。如何在我的应用程序中100%确定记事本是否正在运行? 100%我的意思是,如果有另一个进程的名称是“notepad.exe”,实际上不是一个真正的记事本,但是例如模仿,我不想检测它。只有真正的笔记本。

我已经考虑过阅读过程记忆,但由于记忆位移等原因,它比看起来更困难。

标准方式是名称,对吗?但对我来说,真的很重要,它不是任何其他程序,因为我想与它进行交互如果我发现了错误的进程,那么关键会失败。

有没有人知道这样做的好方法?

PS:没有特定的编程语言可以用。如果可能的话,我更喜欢独立的解决方案。但如果需要,我特意使用.Net / C#。

3 个答案:

答案 0 :(得分:4)

99.9% 1 的唯一方法是确保您查看正确的可执行文件是验证文件的digital signature。例如,您确保有问题的notepad.exe由“Microsoft Corporation”签名。

我会做这样的事情:

  1. 获取正在运行的进程列表。
  2. 过滤到感兴趣的名称( notepad.exe
  3. 获取每个进程的'image [executable]路径。
  4. 验证Authenticode签名是否有效且值得信任。
  5. 将签名者的名称与预期值进行比较。
  6. 成功!你可以非常肯定这是正确的文件。
  7. 这种方法避免了必须事先知道文件应该位于何处的问题(这几乎是不可能的 - 记事本是installed in two locations),它的哈希值应该是什么(显然必然会改变),或者奇怪用户行为(用其他文本编辑器替换记事本)。

    1 - 当然,不可能100%肯定。某人确实确定可以使用预期的签名者名称对可执行文件进行自签名,并将证书添加到其计算机的根存储中,从而使签名看起来有效。

答案 1 :(得分:2)

好吧,我没有遇到过这种问题,但是您可以先通过名称搜索(在您的情况下,这将是notepad.exe)来检查进程是否正在运行,解析{{1}列表,然后得到 Process.GetProcesses() 并查看这是否是记事本可执行文件的路径,这将做交易,对吗?

答案 2 :(得分:0)

您对我们想要运行的可执行文件有何了解?如果你知道文件大小可以作为“黑客”。使用@josh3736的方法,但通过将文件大小与您知道的文件大小进行比较来替换第4点和第5点[不同版本将具有不同的大小,但如果没有太多则可以对它们进行硬编码]。计算Md5-Hashtag看起来会更专业,但基本上会做同样的事情。

** 如果你的进程有一个GUI:你可以使用EnumWindows为孩子们获取编辑框等。找到你的“notepad.exe”的目标,并检查它是否存在。