C++ 确定要与CreateFileMapping一起使用的名称,以检测进程是否正在运行
我使用以下C/C++代码来检测我的应用程序是否正在运行:C++ 确定要与CreateFileMapping一起使用的名称,以检测进程是否正在运行,c++,windows,C++,Windows,我使用以下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");
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;
}
在上面的示例中,我为我们的应用程序ImageProcessor.exe将名称设置为“ImageProcessor”,并且它工作可靠。但是,当我尝试使用相同的技术检测其他进程时,例如我们的第三方远程支持工具TeamViewer.exe,它失败了。我试过“TeamViewer”和“TeamViewer.exe”。每次GetLastError只返回0。有没有办法找到第三方EXE的“lpName”(from)应该是什么?是否可能将EXE加载到二进制编辑器或使用任务管理器
我意识到还有其他技术(如CreateToolHelp32SnapShot)可以确定流程是否正常工作。此问题特定于CreateFileMapping,以及是否可以更广泛地用于此目的。@user3670482:在CreateFileMapping行(向右滚动)上,我将“NAME”设置为“ImageProcessor”。这很有效。将“NAME”设置为“TeamViewer”不起作用。@eryksun:好的,谢谢……您如何为第三方进程查找节对象的名称?在任务管理器中,我的应用程序显示为“ImageProcessor.exe”,远程支持应用程序显示为“TeamViewer.exe”。@user3670482:TeamViewer.exe显示在任务管理器中,进程“TeamViewer.exe”可以在使用CreateToolHelp32SnapShot的当前进程列表中找到。@eryksun:Aah,是的,我现在明白了。刚刚检查了我的应用程序启动代码,我们创建了一个名为“ImageProcessor”的文件映射对象。我们使用它来防止客户意外地运行应用程序的多个实例。我继承了这段代码,几个月前就发现了这一点……但我忘记了。TeamViewer.exe可能没有创建文件映射对象(或者至少没有我知道的名称)。因此,这种技术并不普遍适用。请详细回答,我会接受你的回答。谢谢