[英]How to find application (Java) in PATH in Inno Setup
我可以使用像set PATH
这样的cmd 命令来返回PATH
环境的值或set JAVA
来返回JAVA_HOME
路径变量值。
同样,在Inno Setup 中,我们可以使用'ExpandConstant({%PATH|DefaultValue})'
来获取路径变量值列表。
我的要求是:如果用户使用的是JRE
zip 版本,那么注册表中不会有任何条目。 因此,我必须读取PATH
变量或JAVA_HOME
以获取 Java 的路径。
问题:从JAVA_HOME
获取值非常容易,但我想从path
值列表中提取特定路径,例如:如果用户没有使用JAVA_HOME
而是使用路径变量中的完整路径,如: PATH=c:\\program files\\jre\\bin
,我只想提取这个 JRE 路径而不是整个列表。 是否可以? 请帮忙。
最简单(甚至正确)的方法是找到java.exe
所在的路径。
您可以使用FileSearch
功能,例如:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.