【问题标题】:C++ Finding an executable via windows search pathC ++通过Windows搜索路径查找可执行文件
【发布时间】:2017-05-25 04:00:06
【问题描述】:

我正在使用 C++ 应用程序来启动另一个进程。这个过程恰好是java所以我需要运行javaw.exe。但是,我希望我的应用程序可以在任何安装了兼容 Java 版本并在 Windows 搜索路径中的 Windows 系统上运行。

我正在使用 CreateProcess 启动我的进程,但是第一个参数需要可执行文件的完整路径并且不搜索 Windows 搜索路径。

我想在我的 CPP 代码中从 windows 搜索路径中找到 javaw.exe 的完整路径,然后传递给 CreateProcess,以便我可以适当地启动,然后通过 TerminateProcess。停止外部程序。

如何通过windows搜索路径找到javaw.exe的完整路径?

编辑:这个问题是不同的。比引用的重复,因为我的具体问题是使用 Windows 搜索路径(顺便说一句,它包括本地目录、PATH env 和一些标准位置)。我想专门通过 CPP 做到这一点。我特别想使用 windows 搜索路径系统,因为用户可能拥有多个 javaw.exe,我希望通过 windows 标准搜索路径而不是我实现的自定义搜索方法可以预测哪个 javaw.exe。

【问题讨论】:

  • 如果 Windows 搜索路径是指 PATH,那么我认为应该能够获取路径并提取 Java 的位置。有时还有 JAVA_HOME 设置,你也可以使用。
  • 这不是重复的,因为我试图通过 Windows 搜索路径通过 C++ 执行此操作。该问题与语言无关,并希望通过任何可能的方式找到它。理想的解决方案是返回适当的 exe 路径的 cpp“where”或“which”函数。
  • 我假设当您说“通过 C++”时,您的意思只是“在 C++ 中”而不是“使用 C++ 标准库”?正如所写,这有点模棱两可。

标签: c++ windows process path


【解决方案1】:

有一个名为 SearchPath 的 Win32 API 函数(取决于注册表设置)首先搜索本地目录,然后搜索 windows PATH 变量。您可以选择添加另一个目录进行搜索。更多详情请见the documentation on MSDN

下面是一些示例代码:

LPSTR lpFilePart;
char filename[MAX_PATH]; 

if(!SearchPath( NULL, "javaw", ".exe", MAX_PATH, filename, &lpFilePart))
{ 
     //error handling here
}

std::cout<<"The path is " << filename<<std::endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    相关资源
    最近更新 更多