python - Kontrollerer 'liveness' af en Windows-applikation?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en Windows-applikation, der kører noget dyrt udstyr, denne applikation dør på en række kreative måder. Normalt når det går, dør processen helt. Jeg skrev et lille overvågningsprogram, der leder efter processen 'navn på listen over ting som i øjeblikket kører, og det fungerer godt for disse fejl. Men nogle gange bliver det bare helt ikke-responsivt og kræver opsigelse via task manager, men er stadig 'kørende' i en smule uhensigtsmæssig forstand.


Jeg er helt ubekendt med Windows API, så det er måske ret strejf, men er der noget, jeg kan gøre for at programmere kontrollere 'liveness' af andre processer? Eller som jeg måske bruger til at gætte (? stop med at behandle hændelser fra operativsystemet eller for at alle diskadgang/hukommelsesallokering skal stoppe osv. osv.)


Det ville helst være noget, jeg kunne gøre via Python win32-modulet, men jeg vil forgrene mig til noget, der med succes kan opdage, når denne ting låses op. Og jeg er klar over, at 'liveness' er vag, men jeg vil ikke regere noget ud, især når jeg ikke har indblik i, hvordan denne ting virkelig fejler.

Bedste reference


Jeg synes, at den bedste måde at gå over på dette er ved at bruge Process & Trådfunktioner i WIN32 API. NB: Du kan nemt integrere C ++-kode i python. Dette vil sandsynligvis kræve lidt tid og tålmodighed, og jeg kender ikke de fleste af disse funktioner selv. [1]


På den anden side er der et detaljeret projekt om Procesovervågning på Codeproject og Python WMI, en wrapper til WMI i python, men husk at WMI er betydeligt langsom, og du skal sikre, at tjenesten kører på pc'en. [2] [3]


Det er også muligt, at du muligvis kan sende en besked til processen, der vil få processen til at give et svar eller ændre dets tilstand, hvis det er i live, og så tjekke for denne ændring i processen i et stykke tid. [4]

Andre referencer 1


Du skal have et HWND-håndtag til det pågældende vindue (EnumWindowHandles kan være en god start), og prøv derefter at ringe IsHungAppWindow for at se, om systemet mener, at det ikke reagerer.