java - 如何在 Inno Setup 的 PATH 中查找应用程序(Java)
问题描述
我可以使用cmd命令set PATH
来返回PATH
环境值或set JAVA
返回JAVA_HOME
路径变量值。
同样,在Inno Setup中我们可以使用'ExpandConstant({%PATH|DefaultValue})'
获取路径变量值列表。
我的要求是:如果用户使用的是 zip 版本,JRE
那么注册表中不会有任何条目。因此,我将不得不读取PATH
变量或 JAVA_HOME
获取 Java 的路径。
问题:从中获取值JAVA_HOME
非常容易,但我想从path
值列表中提取特定路径,例如:如果用户没有使用JAVA_HOME
,而是使用路径变量中的完整路径,例如:PATH=c:\program files\jre\bin
,我只想提取这个 JRE 路径而不是整个列表。是否可以?请帮忙。
解决方案
最简单(甚至是正确)的方法是找到路径,在哪里java.exe
。
您可以使用FileSearch
function,例如:
var
Path: string;
begin
Path := FileSearch('java.exe', GetEnv('PATH'));
if Path = '' then
begin
Log('Java not found in PATH');
end
else
begin
Path := ExtractFileDir(Path);
Log(Format('Java is in "%s"', [Path]));
end;
end;
如果你还想采取寻找包含 的路径的方式JRE
,可以使用如下代码:
var
Path: string;
JavaPath: string;
S: string;
P: Integer;
begin
Path := GetEnv('PATH');
while (Path <> '') and (JavaPath = '') do
begin
P := Pos(';', Path);
if P = 0 then
begin
S := Trim(Path);
Path := '';
end
else
begin
S := Trim(Copy(Path, 1, P - 1));
Path := Trim(Copy(Path, P + 1, Length(Path) - P));
end;
if Pos('JDK', Uppercase(S)) > 0 then
begin
JavaPath := S;
end;
end;
if JavaPath = '' then
begin
Log('Java not found in PATH');
end
else
begin
Log(Format('Java is in "%s"', [JavaPath]));
end;
end;
推荐阅读
- azure - Azure 自动化 - 如何通过公共 webhook 运行脚本?
- javascript - Angularjs typeahead不显示第二个输入焦点的选项
- angular - 在 Angular 5 中包含节假日
- c++ - 在 C++11 中将指针转换为多维 C 样式数组
- c++ - 从一组有限的类中静态转换为一个类
- java - java.net.NetworkInterface.getNetworkInterfaces() not listing all interfaces for OS X
- c# - c#如何在Word中获取标准字体样式对象
- angular - Unhandled Promise rejection: Failed to execute 'transaction' on 'IDBDatabase' angularfire
- python - 将 python 2 中的脚本迁移到 python 3.x
- python - 具有不同输出计算的 Scikit-learn