0

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

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

4

1 回答 1

2

您可能需要枚举进程(例如,EnumProcesseswithGetModuleFilenameExCreateToolhelp32Snapshotwith Process32Firstand Process32Next)。如果您没有找到 的实例ntvdm.exe,则说明没有16 位进程正在运行,您可以停在那里。如果确实找到了 的实例ntvdm.exe,则可以使用它VDMEnumTaskWOWEx来枚举其中运行的 16 位进程。

回到它还属于原始所有者的时候,我在 CodeGuru 上发布了一篇文章,展示了如何做到这一切。让它在现代编译器下编译需要一些工作(例如,它已经足够老了,可以使用而iostream.h不是iostream需要启用SeDebugPrivilege它才能在 Windows 7 上运行)。

于 2010-11-08T05:07:11.817 回答