[英]How to uniquely identify a process on windows?
我们以记事本为例。 如何在我的应用程序中100%确定记事本是否正在运行? 100%我的意思是,如果有另一个名为“notepad.exe”的进程实际上不是真正的记事本,而是例如模仿,我不想检测它。 只有真正的笔记本。
我已经考虑过阅读过程记忆,但由于记忆位移等原因,它比看起来更困难。
标准方式是名称,对吗? 但对我来说这是非常重要的 ,它不是任何其他程序,因为我想与它进行交互,如果我发现了一个错误的过程中会有什么重要的失败。
有谁知道这样做的好方法?
PS:没有特定的编程语言可以用。如果可能的话,我更喜欢独立的解决方案。 但如果需要,我特意使用.Net / C#。
99.9%的唯一方法1确保您正在查看正确的可执行文件是验证文件的数字签名 。 例如,您确保有问题的notepad.exe由“Microsoft Corporation”签名。
我会做这样的事情:
这种方法避免了必须事先知道文件应该位于何处的问题(这几乎是不可能的 - 记事本安装在两个位置 ),它的哈希值应该是什么(显然必然会改变),或者奇怪的用户行为(替换)记事本与其他一些文本编辑器)。
1 - 当然,不可能100%肯定。 确实有人确定可以使用预期的签名者名称对可执行文件进行自签名,并将证书添加到其计算机的根存储中,从而使签名看起来有效。
好吧,我没有遇到过这种问题,但您可以先通过名称搜索(在您的情况下,这将是notepad.exe)检查进程是否正在运行,解析Process.GetProcesses()
列表然后,获取Process.StartInfo.FileName
并查看这是否是Notepad可执行文件的路径,这将做交易,对吧?
您对我们想要运行的可执行文件有什么了解? 如果你知道文件大小可以作为“黑客”。 使用@josh3736的方法,但是通过将文件大小与您知道的文件大小进行比较来替换第4点和第5点[不同版本将具有不同的大小,但如果没有太多则可以对它们进行硬编码]。 计算Md5-Hashtag看起来会更专业,但基本上会做同样的事情。
**如果你的进程有一个GUI:你可以使用EnumWindows为孩子们获取编辑框等。找到你的“notepad.exe”的目标,并检查它是否在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.