我正在为一个jar应用程序创建一个Inno安装程序。
我现在要做的是在继续安装之前检查java是否存在。所以我只需要确保用户能够运行:
我现在要做的是在继续安装之前检查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;
感谢所有的帮助