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

时间:2015-03-19 13:49:22

标签: 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");
    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以及是否可以更普遍地用于此目的。

0 个答案:

没有答案