【发布时间】:2023-03-18 08:45:01
【问题描述】:
以下是我的要求:
- 检查是否安装了Java
- 检查是否安装在自定义目录中
- 如果是,则将目录路径保存在变量中
- 否则检测版本并将标准路径保存在变量中
下面是检测版本并将标准路径保存到变量的代码
我的代码有问题:
- 如果同时安装了 32 位和 64 位,它会同时检测到两者。我的目标是仅检测 64 位以防两者都安装。
-
if DirExists(ExpandConstant('{pf32}\java\')) then这是我可以用来检测自定义目录的吗? - 我不认为上面的代码是找到java的自定义目录的正确方法。如果用户安装在 Java 以外的其他文件夹中。另一个问题是如果我们卸载 java 它不会删除文件夹 java/JRE。
我正在使用来自Need help on Inno Setup script - issue in check the jre install@TLama 的代码
[Code]
#define MinJRE "1.7.0"
#define WebJRE "http://www.oracle.com/technetwork/java/javase/downloads/jre6downloads-1902815.html"
function IsJREInstalled: Boolean;
var
JREVersion: string;
JREPath:string
begin
{ read JRE version }
Result := RegQueryStringValue(HKLM32, 'Software\JavaSoft\Java Runtime Environment',
'CurrentVersion', JREVersion);
MsgBox('JAVA 32 bit detected.', mbInformation, MB_OK);
JREPath := 'C:\Program Files (x86)\Java'
{ if the previous reading failed and we're on 64-bit Windows, try to read }
{ the JRE version from WOW node }
if not Result and IsWin64 then
Result := RegQueryStringValue(HKLM64, 'Software\JavaSoft\Java Runtime Environment',
'CurrentVersion', JREVersion);
MsgBox('JAVA 64 bit detected.', mbInformation, MB_OK);
JREPath := 'C:\Program Files\Java'
{ if the JRE version was read, check if it's at least the minimum one }
if Result then
Result := CompareStr(JREVersion, '{#MinJRE}') >= 0;
end;
function InitializeSetup: Boolean;
var
ErrorCode: Integer;
begin
Result := True;
{ check if JRE is installed; if not, then... }
if not IsJREInstalled then
begin
{ show a message box and let user to choose if they want to download JRE; }
{ if so, go to its download site and exit setup; continue otherwise }
if MsgBox('Java is required. Do you want to download it now ?',
mbConfirmation, MB_YESNO) = IDYES then
begin
Result := False;
ShellExec('', '{#WebJRE}', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
end;
end;
【问题讨论】:
标签: java inno-setup