2017-01-10 63 views
0

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

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

我想从我的CPP代码中的Windows搜索路径中找到javaw.exe的完整路径,然后传递给CreateProcess,以便我可以通过TerminateProcess进行适当的启动和更高版本。停止外部程序。

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

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

+1

的可能的复制[?如何找到安装javaw.exe的地方(http://stackoverflow.com/questions/17602113/how-to-find-其中-jawsw-exe-is-installed) –

+0

如果通过Windows搜索路径表示PATH,那么您应该能够获取路径并提取我认为的Java的位置。有时候还有JAVA_HOME集,你也可以使用它。 – Rakete1111

+0

这不是重复的,因为我试图通过C++,通过Windows搜索路径执行此操作。这个问题与语言无关,希望通过任何可能的方式找到它。一个理想的解决方案将是一个cpp“where”或“which”函数返回适当的exe路径。 – Jim

回答

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; 
相关问题