我正在为jar应用程序创建一个Inno Setup安装程序。我现在想做的是在继续安装之前检查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的主目录位于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,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?', mbConfirmation, MB_YESNO) = idYes; if Result1 = true then begin ShellExec('open', 'http://www.java.com/en/download/manual.jsp#win', '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); end; end; end;
感谢你的帮助