首页 > 解决方案 > 如何在 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 路径而不是整个列表。是否可以?请帮忙。

标签: javawindowsinno-setup

解决方案


最简单(甚至是正确)的方法是找到路径,在哪里java.exe

您可以使用FileSearchfunction,例如:

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;

推荐阅读