可以检测.exe是如何启动的吗?

时间:2011-08-31 05:39:04

标签: winapi vb6 exe shellexecute

我希望能够以编程方式检测给定的exe是否为shellex,或者是否在CMD.EXE中以交互方式输入和执行。

是否有关于启动exe的方式有什么表明用于启动它的机制?

上下文:Windows XP,Visual Studio 6语言。

2 个答案:

答案 0 :(得分:5)

可能有一种更简单的方法,但我能想到的唯一方法是检查父进程名称,这涉及几个步骤:

  1. Get the ID of the parent process
  2. Get the handle of the process,使用ID。
  3. GetModuleFileNameEx与找到的句柄(以及NULL作为模块)一起使用以获取可执行文件的名称。
  4. 检查可执行文件的名称是否为cmd.exe或其他。
  5. 请记住,在您执行此检查时(或同时)父进程可能已经消失。

    编辑:

    如果您的程序是控制台应用程序,您还可以检查它正在运行的控制台。如果它是从cmd运行的,它通常会使用相同的控制台。因此,您可以使用GetConsoleTitle,例如,查看它是否为“命令提示符”。这可能不适用于本地化或不同版本的Windows,但如果您有限制案例,则很容易。您也可以使用GetConsoleWindowGetWindowThreadProcessId代替步骤1和2。

答案 1 :(得分:3)

您可以通过检查父进程来说明CMD和资源管理器之间的区别,但是您无法判断它是否由于用户操作而发生。 AFAIK也是在同一个NtCreateProcess / PspCreateProcess调用中启动进程结果的所有方法,因此您无法分辨使用了哪个API。