我可以使用{strong> cmd命令,例如set PATH
返回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路径,而不提取整个列表。可能吗?请帮忙。
答案 0 :(得分:1)
最简单(甚至正确)的方法是找到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;