可靠地检测16位进程

时间:2010-11-08 04:50:17

标签: windows-xp monitoring 16-bit

由于需要运行一个超过15年的应用程序,我希望创建一个监视程序,以确保在32位版本的Windows XP Pro上运行16位应用程序并在必要时启动它。通常我会使用EnumWindows()来查找应用程序的窗口。不幸的是,对于16位应用程序,这不起作用,或者至少不可靠。

鉴于我完全无法控制相关应用程序中的代码,如何可靠地检测它是否正在运行?我用C编码(不是C ++或C#)。

1 个答案:

答案 0 :(得分:2)

您可能需要枚举流程(例如EnumProcesses GetModuleFilenameExCreateToolhelp32Snapshot Process32FirstProcess32Next。如果找不到ntvdm.exe的实例,则没有 16位进程正在运行,您可以在那里停止。如果找到ntvdm.exe的实例,则可以使用VDMEnumTaskWOWEx枚举其中运行的16位进程。

当它还在原始所有者之下时,我在CodeGuru上发布了an article,演示了如何完成所有这些工作。在现代编译器下进行编译需要花费一些工作(例如,它足够老,它使用iostream.h而不是iostream,但是进程枚举部分应该仍然非常正确(但是,在查看内容时,您还需要启用SeDebugPrivilege才能在Windows 7上运行。