Attendibilmente rilevare processo 16 bit
-
29-09-2019 - |
Domanda
A causa della necessità di eseguire un 15 + anni di applicazione desidero creare un programma di sorveglianza per assicurare un'applicazione a 16 bit è in esecuzione su una versione a 32 bit di Windows XP Pro e avviarlo se necessario. Normalmente Userei EnumWindows () per cercare la finestra dell'applicazione. Purtroppo, questo non funziona, o almeno non in modo affidabile, per le applicazioni a 16 bit.
Dato che non ho assolutamente alcun controllo sul codice dell'applicazione in questione, come posso rilevare in modo affidabile anche se non è in esecuzione? Sto codifica questo in C (non C ++ o C #).
Soluzione
avrete probabilmente bisogno di processi (ad esempio Enumerazione, EnumProcesses
con GetModuleFilenameEx
o CreateToolhelp32Snapshot
con Process32First
e Process32Next
). Se non trovate un esempio di ntvdm.exe
, allora non processo a 16 bit è in esecuzione, e si può fermare lì. Se trovate un esempio di ntvdm.exe
, è possibile utilizzare VDMEnumTaskWOWEx
per enumerare i processi a 16 bit in esecuzione in esso.
Ai tempi in cui era ancora sotto i proprietari originali, ho postato un articolo su CodeGuru dimostrando come fare tutto questo. Ci vorrebbe un po 'di lavoro per renderlo compilare sotto un compilatore moderno (ad esempio, è abbastanza vecchio che usa iostream.h
invece di iostream
, ma la parte processo di enumerazione dovrebbe essere ancora praticamente proprio (anche se, a guardare le cose, è' ll anche bisogno di attivare il SeDebugPrivilege
per farlo funzionare su Windows 7).