自动恢复挂起的Windows进程

我试图写一个Windowsbatch file,以恢复一个Windows进程被暂停。 我使用pssuspend(从pstools)来恢复进程。 但是,我正在尝试编写Windowsbatch file脚本,将不断获取进程的状态(如myExe.exe)。 如果脚本没有被暂停,我希望它继续检查它是否被暂停。 如果它被暂停,我希望它运行pssuspend代码。 我不确定如何获得挂起状态。 到目前为止,我有这样的:

if myExe.exe == "Suspend" ( pssuspend -r myExe.exe suspend_fix.bat ) else ( suspend_fix.bat ) 

谢谢你的帮助!

Windows服务(使用正确的属性创建的)可以被挂起,但是我不确定一个可执行文件是如何被挂起的,或者你的意思是什么。

如果你的意思是这个程序已经停止了,那么你需要重新启动它,那么这里有几个代码块用于确定程序是否正在运行:

1)通过检查是否存在exe名称 ,即正在运行。
顺便说一句,我推荐这个来解释你的帖子:

 BOOL ExeExists(char *exe) { HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); PROCESSENTRY32 pe = { 0 }; pe.dwSize = sizeof(pe); if (Process32First(pss, &pe)) { do { if (strstr(pe.szExeFile,exe)) { CloseHandle(pss); return TRUE; } } while(Process32Next(pss, &pe)); } CloseHandle(pss); return FALSE; } 

2)通过检查是否存在PID

 BOOL PidExists(int pid) { HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); PROCESSENTRY32 pe = { 0 }; pe.dwSize = sizeof(pe); if (Process32First(pss, &pe)) { do { if (pe.th32ProcessID == pid) { CloseHandle(pss); return TRUE; } } while(Process32Next(pss, &pe)); } CloseHandle(pss); return FALSE; } 

顺便说一句,这是用来获取进程ID(它是在winbase.h中定义的)
的电话申请。

 int GetProcessIdApp(void) { return GetProcessId(GetCurrentProcess());//defined in WinBase.h } 

在WinBase.h里面

 WINBASEAPI DWORD WINAPI GetProcessId( __in HANDLE Process ); 

在我的情况下 ,一个应用程序在启动时广播它的PID,例如
我的监视程序(Windows服务)可以读取它,然后使用它来持续确定应用程序的状态。 如果发现应用程序已经死机,并且其他条件表明应该仍然在运行,那么我的服务将启动它。