1

在 Windows 上,您可以转到“运行”,输入“cmd”,然后按 Enter,然后相当容易地启动“C:\Windows\system32\cmd.exe”。“python”或“pythonw”也是如此(尽管在第二个示例中没有弹出任何内容)。如果您只知道要执行“python”或“pythonw”并且它位于 PATH 上,那么在 C 中找出可执行文件的完全限定路径名的最简单方法是什么?这个问题似乎与问题高度相关,但没有给出 C 中的最终解决方案。_execp允许使用字符串“python”或“pythonw”,但需要函数的 argv 参数的第一个参数的限定路径。

4

3 回答 3

4

使用 getenv() 获取路径,将其拆分成字符串(在 Windows 上用分号),然后依次测试每个目录中是否存在具有指定名称的可执行文件。

#include <iostream>
#include <sstream>
#include <sys/stat.h>

int main(void)
{
    std::stringstream path(getenv("PATH"));
    while (! path.eof())
    {
        std::string test;
        struct stat info;
        getline(path, test, ':');
        test.append("/myfile");
        if (stat(test.c_str(), &info) == 0)
        {
            std::cout << "Found " << test << std::endl;
        }
    }
}

将 myfile 替换为任何内容,在 Windows 上将 ':' 替换为 ';' 因为路径分隔符不同。

于 2009-11-22T22:42:53.630 回答
3

看看 shell API PathResolve(但是,它被标记为“在任何未来的 Windows 版本中都可以删除”,所以我会避免它)和PathFindOnPath,相反,它是一个稳定的 API。使用 PathFindOnPath,将要搜索的文件名(例如 yourexecutable.exe)作为第一个参数传递,将 NULL 作为第二个参数传递。

于 2009-11-22T22:48:39.517 回答
1

您可以使用PathFindOnPath(),并为第二个值传递 NULL 以搜索当前 PATH 环境变量。

于 2009-11-22T22:45:38.320 回答