获取通过环境变量访问的文件的位置

时间:2016-06-02 22:51:43

标签: c++ windows environment-variables

如何获取通过环境变量访问的文件的位置。 我希望它类似于Windows命令提示符中的_popen("where python","r");命令。 我目前正在使用_popen,但它会暂时打开一个dos窗口。 我已经研究过在没有dos窗口的情况下使用CreateProcess而且.htaccess看起来有点过分了。

2 个答案:

答案 0 :(得分:4)

只要您愿意在文件上添加扩展名,

SearchPath就符合要求。如:

WCHAR buffer[MAX_PATH];
DWORD result = SearchPath(NULL, L"python.exe", NULL, MAX_PATH, buffer, NULL);
if (result > 0)
{
    std::wcout << buffer << std::endl;
}

如果对文件名添加一个扩展名太多,您可以迭代PATHEXT环境变量中的所有值并尝试每个值。

答案 1 :(得分:-1)

您可以在可执行文件上使用LoadLibrary(),然后使用GetModuleFileName()询问其位置。但这确实有副作用,因为EXE实际上是作为模块加载的。

除此之外,您可以使用search order of CreateProcess自行查找文件。

抱歉,我不认为这些选项中的任何一个特别好,但我找不到其他任何东西。