我使用以下C / C ++代码来检测我的应用程序是否正在运行:
bool ProcessIsRunning(void)
{
// Checks to see whether the process is still running...
bool bRunning = false;
HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READONLY, 0, 32, "NAME");
if (hMapping)
{
DWORD dwError = GetLastError();
if (dwError == ERROR_ALREADY_EXISTS)
bRunning = true; // Still running...
CloseHandle(hMapping);
}
return bRunning;
}
在上面的示例中,我将NAME设置为" ImageProcessor"对于我们的应用程序ImageProcessor.exe,它可靠地工作。但是当我尝试使用相同的技术检测其他进程时,例如我们的第三方远程支持工具TeamViewer.exe,它会失败。我试过" TeamViewer"和#34; TeamViewer.exe"。每次GetLastError只返回0.有没有办法找到" lpName" (来自https://msdn.microsoft.com/en-us/library/windows/desktop/aa366537(v=vs.85).aspx)应该是第三方EXE吗?可能将EXE加载到二进制编辑器中或使用任务管理器?
我意识到还有其他技术(例如CreateToolHelp32SnapShot)来确定进程是否正常工作。此问题特定于CreateFileMapping以及是否可以更普遍地用于此目的。