c++服务中通过进程名获取进程的绝对路径
时间: 2024-02-17 10:04:42 浏览: 35
在C++中,可以通过Windows API函数 `CreateToolhelp32Snapshot()` 和 `Process32First()`、`Process32Next()` 遍历系统中的所有进程,然后获取指定进程的绝对路径。
下面是一个示例代码:
```c++
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
// 通过进程名获取进程的绝对路径
std::wstring GetProcessPath(const std::wstring& processName)
{
std::wstring path;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pe32 = { 0 };
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe32))
{
do
{
if (processName == pe32.szExeFile)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);
if (hProcess != NULL)
{
WCHAR szPath[MAX_PATH] = { 0 };
DWORD dwSize = MAX_PATH;
if (QueryFullProcessImageName(hProcess, 0, szPath, &dwSize))
{
path = szPath;
}
CloseHandle(hProcess);
}
break;
}
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
}
return path;
}
int main()
{
std::wstring processName = L"notepad.exe";
std::wstring processPath = GetProcessPath(processName);
if (!processPath.empty())
{
std::wcout << processName << L" 的绝对路径为:" << processPath << std::endl;
}
else
{
std::wcout << processName << L" 没有运行!" << std::endl;
}
return 0;
}
```
注意,需要在程序中添加 `#include <tlhelp32.h>` 头文件,并且编译时需要链接 `kernel32.lib` 库。