如何在Inno Setup的PATH中查找应用程序(Java)

时间:2018-07-13 09:54:45

标签: java windows inno-setup

我可以使用{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路径,而不提取整个列表。可能吗?请帮忙。

1 个答案:

答案 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;