Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定要与CreateFileMapping一起使用的名称,以检测进程是否正在运行_C++_Windows - Fatal编程技术网

C++ 确定要与CreateFileMapping一起使用的名称,以检测进程是否正在运行

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");

我使用以下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;
}
在上面的示例中,我为我们的应用程序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可能没有创建文件映射对象(或者至少没有我知道的名称)。因此,这种技术并不普遍适用。请详细回答,我会接受你的回答。谢谢