在Windows上,您可以转到“运行”,输入“cmd”,按回车键,然后轻松启动“C:\ Windows \ system32 \ cmd.exe”。 “python”或“pythonw”也是如此(尽管在第二个例子中没有弹出)。如果您只知道要执行“python”或“pythonw”并且它在PATH上,那么C中最简单的方法是找出可执行文件的完全限定路径名? This question似乎与问题高度相关,但没有在C中给出最终解决方案。_execp允许使用字符串“python”或“pythonw”,但需要第一个参数的限定路径argv函数的参数。
答案 0 :(得分: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上将':'替换为';'因为路径分隔符不同。
答案 1 :(得分:3)
查看shell API PathResolve(但是,在任何未来的Windows版本中都标记为“可移动”,所以我会避免它)和PathFindOnPath,相反,是一个稳定的API。使用PathFindOnPath,将文件名传递给搜索(例如yourexecutable.exe)作为第一个参数,将NULL作为第二个参数传递。
答案 2 :(得分:1)
您可以使用PathFindOnPath(),并为第二个值传递NULL以搜索当前PATH环境变量。