题
由于需要运行一个15年以上的旧应用程序,我希望创建一个监督程序,以确保有16位应用程序运行于一个32位版本的Windows XP亲和启动它,如果有必要的。通常我会用EnumWindows()寻找的应用程序的窗口。不幸的是,这不起作用,或者至少是不可靠的,对于16位应用程序。
鉴于我绝对没有任何控制代码的应用问题,我怎么能够可靠地探测是否运行?我编这个在C(而不是C++或C#)。
解决方案
你可能会需要一一列举过程(例如, EnumProcesses
与 GetModuleFilenameEx
或 CreateToolhelp32Snapshot
与 Process32First
和 Process32Next
).如果你找不到的一个实例 ntvdm.exe
, 然后 没有 16位的运行过程,并且你可以停在那里。如果你找到一个实例 ntvdm.exe
, 你可以使用 VDMEnumTaskWOWEx
列举的16位的进程的运行。
回来时,它仍在原始所有者,我公布 一篇文章 在CodeGuru展示了,如何做到这一切。它会采取一些工作,以使编制下一个现代化的编译器(例如,它是旧不够,它使用 iostream.h
而不是的 iostream
, 但过程中枚举的部分应该仍然被很多的权利(不过,在寻找的东西,你还需要启用的 SeDebugPrivilege
它的工作,在Windows7).
不隶属于 StackOverflow