inno-setup – 安装前检查Java是否存在

前端之家收集整理的这篇文章主要介绍了inno-setup – 安装前检查Java是否存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为一个jar应用程序创建一个Inno安装程序。
我现在要做的是在继续安装之前检查java是否存在。所以我只需要确保用户能够运行:
java -jar my-app.jar

我现在正在做的是:

[Code]

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
  JavaInstalled : Boolean;
  Result1 : Boolean;
begin
  JavaInstalled := RegKeyExists(HKLM,'SOFTWARE\JavaSoft\Java Runtime Environment\1.6');
  if JavaInstalled then
  begin
    Result := true;
  end else
    begin
      Result1 := MsgBox('This tool requires Java Runtime Environment version 1.6 or newer to run. Please download and install the JRE and run this setup again. Do you want to download it now?',mbConfirmation,MB_YESNO) = idYes;
      if Result1 = false then
      begin
        Result:=false;
      end else
      begin
        Result:=false;
        ShellExec('open','http://javadl.sun.com/webapps/download/AutoDL?BundleId=33787','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
      end;
    end;
  end;
end;

我的问题是:

>检查注册表足以确保java的home目录将在PATH中? (能够在控制台中运行“java”)
>如果安装了更高版本的java,那么注册表中的那个密钥是否存在,否则我将不得不检查每个更高版本的可能?
>有没有人有更好的方式来下载java,而不仅仅是显示一个弹出窗口,并将用户带到下载页面

解决方法

我希望有人觉得这很有用,我所做的是重新使用Inno Setups wiki中的一些代码, >与版本比较为数:
{ Both DecodeVersion and CompareVersion functions where taken from the  wiki }
procedure DecodeVersion (verstr: String; var verint: array of Integer);
var
  i,p: Integer; s: string;
begin
  { initialize array }
  verint := [0,0];
  i := 0;
  while ((Length(verstr) > 0) and (i < 4)) do
  begin
    p := pos ('.',verstr);
    if p > 0 then
    begin
      if p = 1 then s:= '0' else s:= Copy (verstr,1,p - 1);
      verint[i] := StrToInt(s);
      i := i + 1;
      verstr := Copy (verstr,p+1,Length(verstr));
    end
    else
    begin
      verint[i] := StrToInt (verstr);
      verstr := '';
    end;
  end;

end;

function CompareVersion (ver1,ver2: String) : Integer;
var
  verint1,verint2: array of Integer;
  i: integer;
begin

  SetArrayLength (verint1,4);
  DecodeVersion (ver1,verint1);

  SetArrayLength (verint2,4);
  DecodeVersion (ver2,verint2);

  Result := 0; i := 0;
  while ((Result = 0) and ( i < 4 )) do
  begin
    if verint1[i] > verint2[i] then
      Result := 1
    else
      if verint1[i] < verint2[i] then
        Result := -1
      else
        Result := 0;
    i := i + 1;
  end;

end;

{ Here's my code }
function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
  JavaVer : String;
  Result1 : Boolean;
begin
    RegQueryStringValue(HKLM,'SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion',JavaVer);
    Result := false;
    if Length( JavaVer ) > 0 then
    begin
        if CompareVersion(JavaVer,'1.6') >= 0 then
        begin
            Result := true;
        end;
    end;
    if Result = false then
    begin
        Result1 := MsgBox('This tool requires Java Runtime Environment v1.6 or older to run. Please download and install JRE and run this setup again.' + #13 + #10 + 'Do you want to download it now?',MB_YESNO) = idYes;
        if Result1 = true then
        begin
            ShellExec('open','http://www.java.com/en/download/manual.jsp#win',ErrorCode);
        end;
    end;
end;

感谢所有的帮助

猜你在找的Delphi相关文章