由于需要运行 15 年以上的应用程序,我希望创建一个监视程序以确保 16 位应用程序在 32 位版本的 Windows XP Pro 上运行,并在必要时启动它。通常我会使用 EnumWindows() 来查找应用程序的窗口。不幸的是,这对于 16 位应用程序不起作用,或者至少不可靠。
鉴于我完全无法控制相关应用程序中的代码,我如何可靠地检测它是否正在运行?我正在用 C(不是 C++ 或 C#)对此进行编码。
由于需要运行 15 年以上的应用程序,我希望创建一个监视程序以确保 16 位应用程序在 32 位版本的 Windows XP Pro 上运行,并在必要时启动它。通常我会使用 EnumWindows() 来查找应用程序的窗口。不幸的是,这对于 16 位应用程序不起作用,或者至少不可靠。
鉴于我完全无法控制相关应用程序中的代码,我如何可靠地检测它是否正在运行?我正在用 C(不是 C++ 或 C#)对此进行编码。
您可能需要枚举进程(例如,EnumProcesses
withGetModuleFilenameEx
或CreateToolhelp32Snapshot
with Process32First
and Process32Next
)。如果您没有找到 的实例ntvdm.exe
,则说明没有16 位进程正在运行,您可以停在那里。如果确实找到了 的实例ntvdm.exe
,则可以使用它VDMEnumTaskWOWEx
来枚举其中运行的 16 位进程。
回到它还属于原始所有者的时候,我在 CodeGuru 上发布了一篇文章,展示了如何做到这一切。让它在现代编译器下编译需要一些工作(例如,它已经足够老了,可以使用而iostream.h
不是iostream
需要启用SeDebugPrivilege
它才能在 Windows 7 上运行)。