gpt4 book ai didi

inno-setup - 需要有关 Inno Setup 脚本的帮助 - 检查 jre 安装的问题

转载 作者:行者123 更新时间:2023-12-04 18:45:48 26 4
gpt4 key购买 nike

我正在使用以下脚本安装 Java 程序。我面临着这个脚本的两个问题。
如果您知道解决这些问题的方法,请告诉我。我真的很感谢你的时间

  • JRE 检查发生 2 次,即安装开始和安装结束。我希望 JRE 检查仅在安装开始时发生
  • 我正在检查以下 Windows 注册表项以检查 JRE,但此脚本不适用于所有情况。我的意思是有时这是有效的,有时在 64 位 JRE 安装时会失败。我正在寻找一种逻辑来检查所有场景的注册表(即 32 位、64 位和所有 Windows 版本)

  • ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

    #define MyAppName "Test"
    #define MyAppVersion "1.0"
    #define MyAppPublisher "Test"
    #define MyAppURL "gmail.com"
    #define MyAppExeName "abc.exe"
    #define MinJRE "1.6"


    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application.
    ; Do not use the same AppId value in installers for other applications.
    ;(To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{200DC169-9647-4295-91B4-B1D1D8482B82}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={userdocs}\xsxsxs\bvb
    DisableDirPage=yes
    DefaultGroupName=test
    DisableProgramGroupPage=yes
    AllowNoIcons=yes
    LicenseFile=C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\TemsOfUse.txt
    OutputDir=C:\test\test
    OutputBaseFilename=test
    SetupIconFile=C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Icon\icon.ico
    Compression=lzma
    SolidCompression=yes
    PrivilegesRequired=lowest


    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
    Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

    [Dirs]
    Name: "{app}\Graphics"
    Name: "{app}\lib"
    Name: "{app}\Database"
    Name: "{app}\Grades"
    Name: "{app}\HelpFiles"
    Name: "{app}\images"
    Name: "{app}\Scripts"

    [Files]

    Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\test.exe"; DestDir: "{app}"; Flags: ignoreversion;
    Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Graphics\*"; DestDir: "{app}\Graphics"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\DataBase\*"; DestDir: "{app}\DataBase"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "C:\test\Installers_PC_MAC\CORRECTIONS_TO_INSTALLER_BUGS\Grades\*"; DestDir: "{app}\Grades"; Flags: ignoreversion recursesubdirs createallsubdirs


    [Icons]
    Name: "{group}\test"; Filename: "{app}\{#MyAppExeName}"
    Name: "{group}\{cm:uninstallProgram,test}"; Filename: "{uninstallexe}"
    Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

    [Run]
    Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}";check:InitializeSetup; Flags: nowait postinstall skipifsilent


    [Code]

    function installJRE(): Boolean;
    var
    Result1 : Boolean;
    ErrorCode: Integer;
    begin
    Result1 := false;

    Result1 := MsgBox('Java is required to run the program you are trying to install. Please click on Yes button given below to close this installer and be directed to a website were you can download and install Java.',
    mbConfirmation, MB_YESNO) = idYes;
    if Result1 = false then
    begin
    // user can install the Java later also
    Result:=true;
    end else
    begin
    Result:=false;
    ShellExec('open', 'http://www.oracle.com/technetwork/java/javase/downloads/jre6downloads-1902815.html','','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
    end;
    end;


    function InitializeSetup(): Boolean;
    var
    jreVersion: String;
    begin
    Result := False;
    if ((RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\JavaSoft\Java Runtime Environment','CurrentVersion'))) then
    begin
    RegQueryStringValue(HKLM,'Software\JavaSoft\Java Runtime Environment','CurrentVersion',jreVersion);
    if CompareStr(jreVersion,'{#MinJRE}') > 0 then
    begin
    Result:=true;
    end else
    begin
    if(installJRE) then
    Result:=true;
    end;
    end else
    if(installJRE) then
    Result:=true;
    end;
    end.

    最佳答案

    为什么 InitializeSetup 函数在用作 Check 函数时会被多次调用?

    您正在使用 InitializeSetup事件方法作为 Check函数,是什么导致此方法被多次调用。第一次初始化设置时(作为真实事件方法)和下一次 Check确定,文件条目是否来自 [Run]部分应该打开。

    基本上,使用事件方法 Check功能不对。您甚至不应该手动调用它们,只需让安装程序应用程序触发它们即可。在您的情况下,而是创建一个函数来检查是否安装了 JRE 并为您的 Check 使用这样的函数.

    如何获取 Java SE 运行时环境版本?

    您不需要将设置作为 64 位运行。您可以简单地从 WOW 注册表节点读取以获取 64 位 Windows 上的 64 位 JRE 版本。我会尝试使用这样的东西:

    [Run]
    Filename: "{app}\MyApp.exe"; Flags: nowait postinstall skipifsilent; Check: IsJREInstalled

    [Code]
    #define MinJRE "1.6"
    #define WebJRE "http://www.oracle.com/technetwork/java/javase/downloads/jre6downloads-1902815.html"

    function IsJREInstalled: Boolean;
    var
    JREVersion: string;
    begin
    // read JRE version
    Result := RegQueryStringValue(HKLM32, 'Software\JavaSoft\Java Runtime Environment',
    'CurrentVersion', JREVersion);
    // 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);
    // 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;

    关于inno-setup - 需要有关 Inno Setup 脚本的帮助 - 检查 jre 安装的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783959/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com