我们以记事本为例。如何在我的应用程序中100%确定记事本是否正在运行? 100%我的意思是,如果有另一个进程的名称是“notepad.exe”,实际上不是一个真正的记事本,但是例如模仿,我不想检测它。只有真正的笔记本。
我已经考虑过阅读过程记忆,但由于记忆位移等原因,它比看起来更困难。
标准方式是名称,对吗?但对我来说,真的很重要,它不是任何其他程序,因为我想与它进行交互如果我发现了错误的进程,那么关键会失败。
有没有人知道这样做的好方法?
PS:没有特定的编程语言可以用。如果可能的话,我更喜欢独立的解决方案。但如果需要,我特意使用.Net / C#。
答案 0 :(得分:4)
99.9% 1 的唯一方法是确保您查看正确的可执行文件是验证文件的digital signature。例如,您确保有问题的notepad.exe由“Microsoft Corporation”签名。
我会做这样的事情:
这种方法避免了必须事先知道文件应该位于何处的问题(这几乎是不可能的 - 记事本是installed in two locations),它的哈希值应该是什么(显然必然会改变),或者奇怪用户行为(用其他文本编辑器替换记事本)。
1 - 当然,不可能100%肯定。某人确实确定可以使用预期的签名者名称对可执行文件进行自签名,并将证书添加到其计算机的根存储中,从而使签名看起来有效。
答案 1 :(得分:2)
好吧,我没有遇到过这种问题,但是您可以先通过名称搜索(在您的情况下,这将是notepad.exe)来检查进程是否正在运行,解析{{1}列表,然后得到
Process.GetProcesses()
并查看这是否是记事本可执行文件的路径,这将做交易,对吗?
答案 2 :(得分:0)
您对我们想要运行的可执行文件有何了解?如果你知道文件大小可以作为“黑客”。使用@josh3736的方法,但通过将文件大小与您知道的文件大小进行比较来替换第4点和第5点[不同版本将具有不同的大小,但如果没有太多则可以对它们进行硬编码]。计算Md5-Hashtag看起来会更专业,但基本上会做同样的事情。
** 如果你的进程有一个GUI:你可以使用EnumWindows为孩子们获取编辑框等。找到你的“notepad.exe”的目标,并检查它是否存在。