0

所以我有一个问题,我有一个可以启动的应用程序。然后通过测试,我需要将其关闭并重新启动。但它需要在没有硬编码的情况下完成。

那么有没有办法找到一个进程是从哪里运行的呢?我可以找到所有正在运行的进程的列表,但不知道这是否可能。

编辑:它在 Windows 7 操作系统上。

4

3 回答 3

1

简单便携的方法是使用 argv[0]。它返回完整的 .exe 文件路径,这就是您所需要的

于 2012-04-26T19:12:30.083 回答
1

QueryFullProcessImageName()将为进程提供可执行映像的路径:

#include <windows.h>
#include <iostream>

int main()
{
    char exe_path[MAX_PATH];
    DWORD exe_path_size = MAX_PATH;
    if (QueryFullProcessImageName(GetCurrentProcess(),
                                  0,
                                  exe_path,
                                  &exe_path_size))
    {
        std::cout << exe_path << "\n";
    }

    return 0;
}
于 2012-04-26T15:30:08.580 回答
0

首先,“查找进程的运行位置”是什么意思?我假设您的意思是父进程 id,但它可能意味着当前工作目录、远程调用的 ip 等...

要查找父进程 ID,请查看getppid()

编辑:这假设您(像任何理智的程序员一样)正在使用类似 unix 的机器。

编辑#2:你在 Windows 上,所以我不知道。

编辑#3:由于您正在寻找您正在执行的程序的路径,请使用 argv[0]。第一个命令行 arg 到 int main(int argc, char* argv[]) 始终是二进制文件的路径。

于 2012-04-26T15:26:00.590 回答