求助, Python 监控 windows 程序,崩溃后自启动
网上的文章总是通过监控进程存在与否来判断是否重启;
但是这边.net 写的通讯程序崩溃后进程还是在的,无法通过进程有无来判断是否重启;
(崩溃后会弹出 windows 问题报告的窗口,显示“xxx 已停止工作”)
应该如何来判断程序是否崩溃呢?
v2 应该会 windows 这种开发的人 很少了,我会用 findWindow 也是上初中写过 win32
# -*- coding: utf-8 -*-
#!/usr/bin/python
import os, sys, gc, time, ctypes, subprocess
from ctypes import byref, sizeof, windll, c_size_t, c_char, c_void_p, Structure, WinError#, POINTER
from ctypes.wintypes import DWORD, LONG
class PROCESSENTRY32(Structure):
_fields_ = [
(‘dwSize’, DWORD),
(‘cntUsage’, DWORD),
(‘th32ProcessID’, DWORD),
(‘th32DefaultHeapID’, c_size_t),
(‘th32ModuleID’, DWORD),
(‘cntThreads’, DWORD),
(‘th32ParentProcessID’, DWORD),
(‘pcPriClassBase’, LONG),
(‘dwFlags’, DWORD),
(‘szExeFile’, c_char * 260),
] #LPPROCESSENTRY32 = POINTER(PROCESSENTRY32)
def syspid_snapshot(dwFlags=2, th32ProcessID=0):
hSnapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(dwFlags,th32ProcessID)
INVALID_HANDLE_VALUE = ctypes.wintypes.c_void_p(-1).value
if hSnapshot == INVALID_HANDLE_VALUE: raise ctypes.WinError()
return hSnapshot
def get_all_explr_pids():
all_pid=[]
pse = PROCESSENTRY32()
pse.dwSize = ctypes.sizeof(PROCESSENTRY32)
hSnapshot = syspid_snapshot()
pse_crt = ctypes.windll.kernel32.Process32First(hSnapshot, ctypes.byref(pse))
while pse_crt:
try :
hProcess = ctypes.windll.kernel32.OpenProcess(0x0410, 0, pse.th32ProcessID)
if hProcess:
buf = (ctypes.c_wchar * 1024)()
ctypes.windll.psapi.GetModuleFileNameExW(hProcess, 0, ctypes.pointer(buf), 1024+1)
buf = buf[:].encode(‘utf-8’)
buf = buf[:buf.index(“