代码之家  ›  专栏  ›  技术社区  ›  Gerald

如何找到正在运行的Windows服务的进程ID?

  •  2
  • Gerald  · 技术社区  · 15 年前

    我正在寻找一种找到特定Windows服务进程ID的好方法。

    特别是,我需要找到Windows附带的默认“WebClient”服务的PID。它在svchost.exe进程中作为“本地服务”承载。我看到,当我使用netstat查看哪些进程正在使用它在进程名下列出的端口[webclient]时,我希望有一些(相对)简单的机制来查找这些信息。

    2 回复  |  直到 6 年前
        1
  •  5
  •   James McNellis    15 年前

    QueryServiceStatusEx 返回 SERVICE_STATUS_PROCESS ,其中包含运行服务的进程的进程标识符。

    你可以使用 OpenService 从服务的名称获取服务的句柄。

        2
  •  0
  •   Pierre Ciholas    6 年前

    这里有一个极简主义C++函数来完成你想要的:

    DWORD GetServicePid(const char* serviceName)
    {
        const auto hScm = OpenSCManager(nullptr, nullptr, NULL);
        const auto hSc = OpenService(hScm, serviceName, SERVICE_QUERY_STATUS);
    
        SERVICE_STATUS_PROCESS ssp = {};
        DWORD bytesNeeded = 0;
        QueryServiceStatusEx(hSc, SC_STATUS_PROCESS_INFO, reinterpret_cast<LPBYTE>(&ssp), sizeof(ssp), &bytesNeeded);
    
        CloseServiceHandle(hSc);
        CloseServiceHandle(hScm);
    
        return ssp.dwProcessId;
    }