Найти путь установки JRE в Inno Setup

Следующее - мое требование:

  1. Проверьте, установлена ??ли Java
  2. Проверьте, установлен ли он в пользовательском каталоге
  3. если это так, то сохраните путь к каталогу в переменной
  4. В противном случае определите версию и сохраните стандартный путь в переменной

Ниже приведен код, который определяет версию и сохраняет стандартный путь к переменной

Проблемы с моим кодом:

  1. Если установлены 32 и 64 бит, они обнаруживают обе. Наша цель - обнаружить только 64 бит, если они установлены.
  2. if DirExists(ExpandConstant('{pf32}java')) then Это то, что я могу использовать для обнаружения пользовательского каталога?
  3. Я не думаю, что приведенный выше код - это правильный способ найти пользовательский каталог java. если пользователь установлен в другой папке, отличной от Java. Другая проблема заключается в том, что если мы удалим java, он не удалит папку java / JRE.

Я использую код @ TLama из « Нужна помощь по скрипту Inno Setup» - проблема с проверкой установки jre

[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, 'SoftwareJavaSoftJava 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, 'SoftwareJavaSoftJava Runtime Environment',
      'CurrentVersion', JREVersion);
  MsgBox('JAVA 64 bit detected.', mbInformation, MB_OK);
  JREPath := 'C:Program FilesJava'
  { 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,

1

Ответов: 1


2 принят

Путь установки JRE хранится в реестре следующим образом:

[HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment]
"CurrentVersion"="1.8"

[HKEY_LOCAL_MACHINESOFTWAREJavaSoftJava Runtime Environment1.8]
"JavaHome"="C:\Program Files\Java\jre1.8.0_172"

Вы можете получить путь к установке последней версии (с 64-битной настройкой), используя следующий код:

const
  JavaKey = 'SOFTWAREJavaSoftJava Runtime Environment';

function GetJavaVersionAndPath(
   RootKey: Integer; var JavaVersion: string; var JavaPath: string): Boolean;
var
  JREVersion: string;
begin
  Result :=
    RegQueryStringValue(RootKey, JavaKey, 'CurrentVersion', JavaVersion) and
    RegQueryStringValue(RootKey, JavaKey + '' + JavaVersion, 'JavaHome', JavaPath);
end;

{ ... }
var
  JavaVersion: string;
  JavaPath: string;
begin
  if GetJavaVersionAndPath(HKLM64, JavaVersion, JavaPath) then
  begin
    Log(Format('Java %s 64-bit found in "%s"', [JavaVersion, JavaPath]));
  end
    else
  if GetJavaVersionAndPath(HKLM32, JavaVersion, JavaPath) then
  begin
    Log(Format('Java %s 32-bit found in "%s"', [JavaVersion, JavaPath]));
  end
    else
  begin
     Log('No Java found');
  end;
end;
Java, Inno-установки,
Похожие вопросы