我正在寻找一种找到特定Windows服务的进程ID的好方法。
特别是,我需要找到Windows附带的默认“WebClient”服务的pid。它作为svchost.exe进程中的“本地服务”托管。我看到当我使用netstat查看哪些进程正在使用它在进程名下列出[WebClient]的端口时,所以我希望有一些(相对)简单的机制来查找这些信息。
答案 0 :(得分:5)
QueryServiceStatusEx
返回SERVICE_STATUS_PROCESS
,其中包含运行服务的进程的进程标识符。
您可以使用OpenService
从名称中获取服务句柄。
答案 1 :(得分:0)
这是一个极简的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;
}