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

C++ 如何找到正在运行的Windows服务的进程ID?,c++,winapi,windows-services,C++,Winapi,Windows Services,我正在寻找一种查找特定Windows服务的进程ID的好方法 特别是,我需要找到Windows附带的默认“WebClient”服务的pid。它作为“本地服务”托管在svchost.exe进程中。我看到,当我使用netstat查看哪些进程正在使用哪些端口时,它会在进程名称下列出[WebClient],因此我希望有某种(相对)简单的机制来查找此信息。返回一个,其中包含运行服务的进程的进程标识符 可以从它的名称中获得服务句柄。 < P>这是一个极简主义C++函数来实现你想要的: DWORD GetSer

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

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

返回一个,其中包含运行服务的进程的进程标识符


可以从它的名称中获得服务句柄。

< P>这是一个极简主义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;
}
DWORD GetServicePid(const char*serviceName)
{
const auto hScm=OpenSCManager(nullptr,nullptr,NULL);
const auto hSc=OpenService(hScm、服务名称、服务查询状态);
服务状态进程ssp={};
DWORD字节=0;
QueryServiceStatusEx(需要hSc、SC状态、流程信息、重新解释铸件(&ssp)、sizeof(ssp)和BYTES);
关闭服务手柄(hSc);
关闭服务手柄(hScm);
返回ssp.dwProcessId;
}

谢谢,工作很有魅力。不过,我认为应该是OpenService而不是CreateService来获得句柄;关于
OpenService
,您是正确的;我已经修好了。