我希望能够检测给定的exe是否是以编程方式shellex,或者是否已经在CMD.EXE中以交互方式输入和执行。是否可以检测到.exe是如何启动的?
有没有什么关于启动exe的方式,表明启动它的机制?
上下文:Windows XP,Visual Studio 6种语言。
我希望能够检测给定的exe是否是以编程方式shellex,或者是否已经在CMD.EXE中以交互方式输入和执行。是否可以检测到.exe是如何启动的?
有没有什么关于启动exe的方式,表明启动它的机制?
上下文:Windows XP,Visual Studio 6种语言。
有可能是一个更简单的方式,但我能想到的唯一的办法是检查父进程名,这涉及几个步骤:
请记住,当您(或同时)执行此检查时,父进程可能已经不存在。
编辑:
如果你的程序是一个控制台应用程序,您还可以检查它在运行控制台如果它是从CMD运行时,它通常会使用相同的控制台。因此,例如,您可以使用GetConsoleTitle,并查看它是否为“命令提示符”。这可能不适用于本地化或不同版本的Windows,但如果您限制了个案,则很容易。您也可以使用GetConsoleWindow和GetWindowThreadProcessId而不是步骤1和2.
您可以通过检查父进程来区分说CMD和资源管理器,但不能分辨是否由于用户操作而发生。另外,AFAIK启动一个进程的所有方法都会导致相同的NtCreateProcess/PspCreateProcess调用,因此您无法知道哪个API被使用。
@Chris Pietschmann - 更好的标签。谢谢。 – bugmagnet