【问题标题】:Get location of file accessed through environment variable获取通过环境变量访问的文件的位置
【发布时间】:2016-10-02 20:54:21
【问题描述】:

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

【问题讨论】:

  • 你真的需要这个位置吗? where 返回的路径是无论如何都会使用的路径(即只是 _popen("python"))。
  • 我不想运行 python,我想找到它的位置,这似乎是要走的路。我确实在 PATH 中找到了 python 的位置,但它变得混乱了,因为我那里也有 python/脚本

标签: c++ windows environment-variables


【解决方案1】:

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 环境变量中的所有值并尝试每一个。

【讨论】:

  • 哦,这比我的建议好多了。
【解决方案2】:

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

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

抱歉,我认为这两个选项都不是特别好,但我找不到其他选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 2014-12-31
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多