From f851bb1025277712191ea23ad7578505dfc89249 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Mon, 11 Aug 2025 17:33:22 -0700 Subject: [PATCH 01/49] Moving from local work to gh repo --- inno_setup/create_exe.iss | 214 ++++++++++++++++++ .../licenses/license-GPLv2+CE.en-us.rtf | 145 ++++++++++++ inno_setup/logos/logo.ico | Bin 0 -> 163049 bytes inno_setup/logos/logo_small.bmp | Bin 0 -> 9294 bytes inno_setup/logos/welcome-dialog.bmp | Bin 0 -> 981958 bytes inno_setup/scripts/boolean_checks.iss | 66 ++++++ inno_setup/scripts/get_constants.iss | 38 ++++ inno_setup/scripts/install_handler.iss | 140 ++++++++++++ inno_setup/scripts/uninstall_handler.iss | 58 +++++ inno_setup/tranlsations/default.iss | 81 +++++++ 10 files changed, 742 insertions(+) create mode 100755 inno_setup/create_exe.iss create mode 100644 inno_setup/licenses/license-GPLv2+CE.en-us.rtf create mode 100644 inno_setup/logos/logo.ico create mode 100644 inno_setup/logos/logo_small.bmp create mode 100755 inno_setup/logos/welcome-dialog.bmp create mode 100755 inno_setup/scripts/boolean_checks.iss create mode 100755 inno_setup/scripts/get_constants.iss create mode 100755 inno_setup/scripts/install_handler.iss create mode 100755 inno_setup/scripts/uninstall_handler.iss create mode 100755 inno_setup/tranlsations/default.iss diff --git a/inno_setup/create_exe.iss b/inno_setup/create_exe.iss new file mode 100755 index 000000000..a0b3eebc9 --- /dev/null +++ b/inno_setup/create_exe.iss @@ -0,0 +1,214 @@ +;------------------------------------------------------------------------------ +; This Inno Setup script file is used to configure the installation process +; for the specified application. It defines the setup parameters, files to be +; installed, registry modifications, shortcuts, and other installation tasks. +; Modify this file to customize the installer behavior and options. +;------------------------------------------------------------------------------ + +#define Vendor "Eclipse Adoptium" +#define VendorBranding "Eclipse Temurin" +#define ProductCategory "jdk" +#define Architecture "x64" +#define JVM "hotspot" +#define ProductMajorVersion "17" +#define ProductMinorVersion "0" +#define ProductMaintenanceVersion "15" +#define ProductBuildVersion "6" +#define FullJdkVersion ProductMajorVersion + "." + ProductMinorVersion + "." + ProductMaintenanceVersion + "." + ProductBuildVersion +#define FullJdkPlusVersion ProductMajorVersion + "." + ProductMinorVersion + "." + ProductMaintenanceVersion + "+" + ProductBuildVersion +#define AppURL "https://adoptium.net/temurin/releases" +#define OutputExeName "OpenJDK" + ProductMajorVersion + "-" + ProductCategory + "_" + Architecture + "_windows_" + JVM + FullJdkVersion +#define ProductFolder ProductCategory "-" + FullJdkVersion + "-" + JVM + +; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped +#define AppName VendorBranding + " " + {code:Uppercase, ProductCategory} " with " + JVM + " " + FullJdkPlusVersion + " (" + Architecture + ")" +; TODO: Decide on AppID approach +#define AppId "{{767A46AB-EDEE-4F76-8987-842A6397F37A}" + +; #define SourceDir "" +#define OutputDir "output" +#define SetupIconFile "logos\logo.ico" +#define IniFile '{app}\install_tasks.ini' + + +; Include external files after definitions so those definitions can be used in the included files +#include "translations\default.iss" +#include "scripts\install_handler.iss" +#include "scripts\uninstall_handler.iss" +#include "scripts\boolean_checks.iss" + +[Setup] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=setupsection + +;; Inno settings +; $command="dotnet ${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:${env:WindowsCert}" +SignTool=signtool +Uninstallable=yes +Compression=lzma +SolidCompression=yes +WizardStyle=modern +; Ensure correct install dirs by setting the archs that are 64-bit +ArchitecturesInstallIn64BitMode=x64compatible arm64 +; Notify windows explorer that the environment variables have changed +ChangesEnvironment=yes +; Debug +; SetupLogging=yes + +;; App info +AppId={#AppId} +AppName={#AppName} +AppVersion={#FullJdkVersion} +AppPublisher={#Vendor} +AppPublisherURL={#AppURL} +AppSupportURL={#AppURL} +AppUpdatesURL={#AppURL} + +;; Dirs and logos +OutputDir={#OutputDir} +OutputBaseFilename={#OutputExeName} +SourceDir={#SourceDir} +; Setting default installDir based on the install mode +DefaultDirName={code:GetDefaultDir} +; Enable the user to select the installation directory every time +UsePreviousAppDir=no +UninstallFilesDir={app}\uninstall +SetupIconFile={#SetupIconFile} +LicenseFile=licenses\license-GPLv2+CE.en-us.rtf +; Add these lines to change the banner images +WizardImageFile=logos\welcome-dialog.bmp +WizardSmallImageFile=logos\logo_small.bmp + +;; Dialog settings +DisableDirPage=no +AlwaysShowDirOnReadyPage=yes +DirExistsWarning=auto +; Disables folder selection for start menu entry +DisableProgramGroupPage=yes +DisableWelcomePage=no +UsedUserAreasWarning=no +; Enable the user to select the installation language +ShowLanguageDialog=yes + +;; Privileges settings +; Add these lines to enable installation scope selection +PrivilegesRequired=admin +PrivilegesRequiredOverridesAllowed=dialog +; Enable the user to select the installation mode every time (no means that upgrades will use the same mode as the previous install) +UsePreviousPrivileges=no + +[Tasks] +Name: "pathMod"; Description: "{cm:PathModDesc}"; GroupDescription: "{cm:PathModTitle}"; +; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension +Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; +Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; +; HKLM keys can only be created/modified in Amin Install Mode +Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; + +[Icons] +Name: "{autoprograms}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}" + +[Files] +Source: "jdk-17.0.15+6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +; Source: "logos\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname + +[InstallDelete] +Type: filesandordirs; Name: "{app}" +Type: files; Name: "{app}\install_tasks.ini" + +[UninstallDelete] +; This section is needed since uninstall misses the install_tasks.ini file +Type: files; Name: "{app}\install_tasks.ini" + +; All registry key info translated from current wix/msi installer scripts +[Registry] +; HKLM = HKEY_LOCAL_MACHINE +; HKA: +; On per machine install = HKLM = HKEY_LOCAL_MACHINE +; On per user install = HKCU = HKEY_CURRENT_USER + +; Always created +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\"; \ + ValueType: none; \ + Flags: uninsdeletekeyifempty; +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}"; \ + ValueType: none; \ + Flags: uninsdeletekey; +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: string; ValueName: "Path"; ValueData: "{app}"; \ + Flags: uninsdeletekey; +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "Main"; ValueData: "1"; \ + Flags: uninsdeletekey; + +; pathMod: Add Environment Path keys if the user requests them +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "EnvironmentPath"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: WasTaskSelected('pathMod'); +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "EnvironmentPathSetForSystem"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('pathMod'); +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "EnvironmentPathSetForUser"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('pathMod'); + +; jarfileMod: Add .jar file association keys if the user requests them +; Note: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids is +; automatically created by Windows when running jar file for the first time +Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ + ValueType: string; ValueName: ""; ValueData: "{#Vendor}.jarfile"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ + ValueType: string; ValueName: "Content Type"; ValueData: "application/java-archive"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +; Creating null keys this way to make sure that they are removed as expected during uninstallation +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +; Two doublequotes (") are used in the ValueName to escape the quotes properly. Example value writen to key: "C:\Program Files\Adoptium\jdk-17.0.15.6-hotspot\bin\javaw.exe" -jar "%1" %* +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open\command"; \ + ValueType: string; ValueName: ""; ValueData: """{app}\bin\javaw.exe"" -jar ""%1"" %*"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +; TODO: Add HKA keys for JDK8 on x64 (if IcedTeaWeb is bundled) to process .jnlp files (similar to the .jar file handling above). +; OR: decide that EXEs will no longer support JDK8 and remove this TODO + +; javaHomeMod: Add JavaHome keys if the user requests them +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "JavaHome"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: WasTaskSelected('javaHomeMod'); +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "JavaHomeSetForSystem"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('javaHomeMod'); +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "JavaHomeSetForUser"; ValueData: "1"; \ + Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('javaHomeMod'); +; Add JAVA_HOME env var for system-level environment variables (admin install) +Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \ + ValueType: string; ValueName: "JAVA_HOME"; ValueData: "{app}"; \ + Flags: uninsdeletevalue; Check: IsAdminInstallMode and WasTaskSelected('javaHomeMod'); +; Add JAVA_HOME env var for user-level environment variables (user install) +Root: HKCU; Subkey: "Environment"; \ + ValueType: string; ValueName: "JAVA_HOME"; ValueData: "{app}"; \ + Flags: uninsdeletevalue; Check: not IsAdminInstallMode and WasTaskSelected('javaHomeMod'); + +; javasoftMod: Add JavaSoft Keys if the user requests them +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}"; \ + ValueType: string; ValueName: "CurrentVersion"; ValueData: "{#ProductMajorVersion}"; \ + Flags: uninsdeletevalue; Check: (ShouldUpdateJavaVersion and not IsUninstaller and WasTaskSelected('javasoftMod')) or (IsUninstaller and WasTaskSelected('javasoftMod')); +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ + ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#FullJdkVersion}"; \ + ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ + Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); +; The RuntimeLib key is only used by JREs, not JDKs +#if ProductCategory == "JRE" +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ + ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#FullJdkVersion}"; \ + ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ + Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); +#endif +; TODO: Add HKLM key for JDK8 on x64 (if IcedTeaWeb is bundled) below +; OR: decide that EXEs will no longer support JDK8 and remove this TODO +; Root: HKLM; Subkey: "SOFTWARE\Classes\MIME\Database\Content Type\application/x-java-jnlp-file"; ValueType: string; ValueName: "Extension"; ValueData: ".jnlp"; Flags: uninsdeletevalue; \ No newline at end of file diff --git a/inno_setup/licenses/license-GPLv2+CE.en-us.rtf b/inno_setup/licenses/license-GPLv2+CE.en-us.rtf new file mode 100644 index 000000000..2bfa40bb0 --- /dev/null +++ b/inno_setup/licenses/license-GPLv2+CE.en-us.rtf @@ -0,0 +1,145 @@ +{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031\deflangfe1031{\fonttbl{\f0\fnil\fcharset0 Consolas;}} +{\*\generator Riched20 10.0.17134}{\*\mmathPr\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 +\pard\nowidctlpar\f0\fs17 GNU GENERAL PUBLIC LICENSE\par +Version 2, June 1991 \par +\par +Copyright (C) 1989, 1991 Free Software Foundation, Inc. \par +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA\par +\par +Everyone is permitted to copy and distribute verbatim copies\par +of this license document, but changing it is not allowed.\par +\par +Preamble\par +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. \par +\par +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. \par +\par +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. \par +\par +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. \par +\par +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. \par +\par +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. \par +\par +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. \par +\par +The precise terms and conditions for copying, distribution and modification follow. \par +\par +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". \par +\par +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. \par +\par +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. \par +\par +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. \par +\par +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: \par +\par +\par +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. \par +\par +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. \par +\par +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) \par +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. \par +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. \par +\par +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. \par +\par +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: \par +\par +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par +\par +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, \par +\par +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) \par +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. \par +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. \par +\par +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. \par +\par +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. \par +\par +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. \par +\par +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. \par +\par +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. \par +\par +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. \par +\par +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. \par +\par +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. \par +\par +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. \par +\par +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. \par +\par +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. \par +\par +NO WARRANTY\par +\par +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. \par +\par +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. \par +\par +\par +END OF TERMS AND CONDITIONS\par +\lang7\par +How to Apply These Terms to Your New Programs\par +\par +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par +\par +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.\par +\par + +\pard\nowidctlpar\li720 One line to give the program's name and a brief idea of what it does.\par +\par +Copyright (C) \par +\par +This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\par +\par +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\par +\par +You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par + +\pard\nowidctlpar\par +Also add information on how to contact you by electronic and paper mail.\par +\par +If the program is interactive, make it output a short notice like this when it starts in an interactive mode:\par +\par + +\pard\nowidctlpar\li720 Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details.\par + +\pard\nowidctlpar\par +The hypothetical commands 'show w' and 'show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than 'show w' and 'show c'; they could even be mouse-clicks or menu items--whatever suits your program.\par +\par +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:\par +\par + +\pard\nowidctlpar\li720 Yoyodyne, Inc., hereby disclaims all copyright interest in the program 'Gnomovision' (which makes passes at compilers) written by James Hacker.\par +\par +signature of Ty Coon, 1 April 1989\par +\par +Ty Coon, President of Vice\par + +\pard\nowidctlpar\par +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.\par +\par +\par +"CLASSPATH" EXCEPTION TO THE GPL\par +\par +Certain source files distributed by Oracle America and/or its affiliates are subject to the following clarification and special exception to the GPL, but only where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the LICENSE file that accompanied this code."\par +\par + +\pard\nowidctlpar\li720 Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.\par +\par +As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.\par + +\pard\nowidctlpar\par +\par +} + \ No newline at end of file diff --git a/inno_setup/logos/logo.ico b/inno_setup/logos/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..5906cf77a0d6deef0e23f619e37fa4b77ac0b911 GIT binary patch literal 163049 zcmeHQ2V4|K`yNUtr=Va!=j^Qh{44CY)|wC>pQ_KV5aQ)T$nfFn z&%H+wlIusvm@!q~4}kBlC1l#Ps{Ox%@82RMJiKau3nSvS(1@@L`}^O*Zv`zjCcWV^ z{1mKFuZI^xU|ZcqaJrKxKiVX$K8&aT{kz2g%L{aP`$T3sAgm^=l9;L8E-}vKCu}|| zi!_pzMUuKumK-zNViv3X)iOp-0kRs9^J3%`UE-O*@+g}nWk-x?*%49?B}dJ+nw?i3 zvOEXhuLIsWxwK0hGwFH%zTlM2IDVATK7JJ0Uk3+Eqs^w8CD3`6am>$v{WZahWA=7Q zQVjG6Qw7p|!*q`sLElbZAWz6S7p_o;%#4*q-wI8@XDbqL~r?VhpnH{gl_ z6gA0>5Ju(lJ$Ti7=S#RX$tyBylVHj8lp*mJ<4+f_xkL4PWZ z1u<@3ItOlch-Z%WNmJMg&bSRIJNiO#Lq1h! zol<(7Ofib1>+5<}L!YhB%QJkE6#nn( zAf4iwy=r~kGO?l0p6RPH-oC!0%kX(xA780D{#EUc@1Z*Wc07IqF$$X=$WQ&)t)@atrGM4&^R{>KTU6oGGgy%26e#!$aE}9bodcx)eR3i`_eft| z1h~h6`#zZwf4p;JSEu*Zh%JXK6!jW7Pvpvp`6Aa>=gB&Z&EMPA@5Ub2#xUmQ-k0CM zd(@ES`6o@bX^HKE-%U2sbHx6I zWcqsh3(R)Fwr9ZicFD|m5+x&&Ys=b~M|Fs+6SHZGC7!G=k0j;v1o1IWptBl^;~HD{ zVgj?4{9H*SIZK=K``%6c{cZ`&8vK3aAN7a%uNnUL&-I`9D*w9%>3^a_EVNfrfI>?s z%a4*$8cn>76T$!0?U@RA)fN=|cQyI7k|+w6nlecphBI+w5))4XwL}o?H-TOx9gS1z zzbr4)AV8qD;9aJZUQDH)__3uv>#MO;S8~-dQ?>?4#`{YE-su}-k`@VnXx;5l%NZb8>7XCi+ zkNQ*jPg~@F%zrBX+raui@UKlfL2XY~`L9ot{WojfT5=|sY&leE;rpR*CEPDL>M~Vu zM0*JL^$w!WLvCyx-S6tgNVtD;L~C5#cy#!+Z$n7JOp^MDl6|?8wn-C zcrPNlJZd2Scgtjcw9!?5v~gAo;F{Q31*`U0)DP;X zS_@5iMg5?DnxdQP@1TBAKh;`j%Bx}N=bu&oV$-W8|H3#AQgO*|F#n`^Zutq4-$J-s zaf)nX>yMV{3J+d_JcAc6F975>7nbqzJ6$g_2Upyu7Hj{aaG%M8DDL`MFgMH{nCrx` zrJ%S;Iuk-kyL;5k>Nd5v`ja}g1lq%KUMiqnSCvzvb>)KzU?5;GGu2 zL~72SzrXUJ@esw=mV*?VcrAsIito(#D6fzol*we|$08EEQrxdcurS6xK$z4*xa1Hd zUd^8W(Az)sa?e?J$~Ak<1-I-qNzDZu=Tg7Cja$DhO)}r{_XRR?fsnixE*klA5MNxo z9kzZy|7Y25?=L#cp8w#y-F@BCR+Vad|4f_xpg;Wit;O-Y?T-`H=l`V+&i`G}A>E#T z0-irdA3}TNzuvPn)p z`WeC2zu5XqAYW`Zq49EwOEa~$`9H0{xTdWvbxHkFV?0?MS8DUh9;asgYwV{LWa=8x zYp$V!!XCkbNB;^IJZu4!^qef(!`8n>-2BO_Z`M~gd@|QP0z7OkyffF849?kdWXInZ zEq4`PB6D|El4S=f+xbUGdyiWsacv>EO;}rL54~{6{Kp9vQ~o;9E9BmB*N}TrEr8>0 z|1LV^6j_mPe5~U3KfWss+fRvYCkto0D#2ekdqw|<*MHji*5;)yw=&=!1@D2QlP=c5vzW5VQ)FDmId@`tUttC3mDH5` zZB6-3$5^IlLJoC(^J?2&KR=RG*1G<9y#A)7WmCR`>5uxy{Ez;J{*UEf&G@f1;~y;l zG5*2$uSWcj@h{eY>WmNDl-ORI?_m6o@ju4@82@AZkMTdo|4-Y$vHsI~?cZ4c)5H4T zIj>f`{{iW*zW)&e_dkl@{zog;e{ABI2NUbx{~)4d&l!UAqi@wJ|KL8LyAj+5HEu;1-JtH|U+{yT zlp1-#_%6Bz{El%yz-;)<=>S}wlz-&SPo<+AgT)zk_Aqo@*eJ=ipakO*=Bw3 zY@6hfzv&aeA|2yn-@>gQ&M7`_JLB;YRq|Kg|Mpv0u^Yznqpbs>%ppiNuJ?QanNpHr z<(0J|sdw56+8XfAT>D^V;cu>C1^a7V|Hy^H-L?AJaXiD)?EU-&GW$T;I2ZQ%i_@*V zGS??*(?_o*_VLbGQ#7;SSJ$xo=lJ>y@%l0SQU9y~R{Q^R<$sv}(f_ghdw$~|%>S7G zG5=%!$M^^1KWGPo7}yBo-{+|P1IvFb|FQhX@*m58EdSf0{GX_Q?f-9nT(R3RfKOWo zLYdQhvT<$;1tbja|MbcFD#DBcSlN_g6novR(ElPIdkG z@A+l`>OQrWaMdUc#N>H-t-ko@?Ru-Pn;j=&4B%_PlW`&@!UtTCffinEo+fR3#R_+6Vf6|^1XK~?-+O|$TPXClcA z8ZA6)c~N-U__FY{NvlC{+9X+Y&LmoK*~IZ~x)W(nsY&|`W>xzuOe)}VDxmSQ#V zW5RM&y_84Ul8VcLlVMIMMi=8!G$($IdWAJk7ny3lqV>Ie0styUV^5A}ok zX-F5^u0#Exezes}L;InAP(KanLfdtyAJmVwT4`uM)DP;XAzf&@4)xOn{X|3mge!rQ z%a1|-gh)bL8-nA|KOqMCCnQz%Pe_9P2{CXTZ2;$s_3yunQf!FyMu11fWwWIfm&kI! zvR1@$@fEUAnMFF?&2=Eq`Np_?uEM{47V`yQS!<#l{AQ0lg+KI9fbpiD_HU`~=Yp@u zKvNj-o>@s|eJi(nWqRdkr>W90t&FkGVX`-Re4uRS`Kgj5!ZVeF9{u3$_2ApFfHAEJ zPx#FdkALuiyai*rJ28 z$NFCTdY^0NO2#!4CMax0^v+x*e=YCp1HetK{$uV_1>~cz#33+eCDZINu9`A_mVZT& z!z6`E@7YRn4EX7jwfUEp81t$r#~7Nusb2pvmY)yxgrDOqKUdq3pB&_eOIJgYAI^Dc zksrIe1Hm`1p^qkd37T>5Bi8|nx3)0jrMwxfPfKV14~Y#Zta z_0yO}xVEEyP(NJyXlxtm2ldmKM!2@4eo#ML`eIe1Hm`1p^qkd37T>5Bi8|vrT z_2V`L?k{f;hd9Iice@FE+S=$ov7*R6Na5l#OG%EZ?!RyP#U=Gi+7@W&{(JwAgk=6! z$-5rYgb#a75fryF{&oo!<+#7E=-K~2N)iYByq5d@F5j%L$^gZ!jIzcsvzJ(AGjG8&aT0Bxg>0++ypomQY2<$c%YUf;^M4fhKTT$dVY>NR{Gb0v@V^!L z=Y9@Wmw5y9kNm?}*1F`F>)6PD+i}mP3-XWrH#c_TWBJ>r@hS2T<6s%3hK{RjOA{RjPrD@M`f zHuN9#AM_veA6(0{l*LYLdnf6#x>f6#w)=`mc#M*l(oLH|Mj;qnMw zZbSb;|3Uvj|Iww#a2*@{2mJ^A2mOc3BXqe9{YQ`eXI+iw9}hzxH$6qw^QW_(Jb#){ zc59cL3OK!@ONU-z_Jb#);2rrc( zyqk()yvs~B?-Fwha8pll+dEsiToeBcpAco`RBMIE)L9`SdJUzRSSdxoe(Ov$P=YBcOPH6D6Qj{)a5EQT5lK19iw z0!rS8{Jahj40G=W>M?@g+&-xqdxQ0$dP^rES+qkorpHvtPmUpC{l#R-PtIYA5stw! z(sM2){qOA}Zx^5R_PX=U9*@G!`v5=bC${V#_h8>tP313np_nY(D*nVNfKS_Gu2gO3 zSM?WChamav?h~ZMc^V~su5Kcu@(;h|mcB~T*ciTTx;-tNzIA=O#_>;xSut7gjrik# z2>-LXPmrkj&#K}-P0#sz}|4dkDDeCL+PJIKH8Ip#_y%Y3s8|Xi}=a{QZ zK>m?`^ndh!E|1XVHuN9#AM_veA6(0{l*LYLdnf6#x>f6#w)=`mc# zM*l(oLH|Mj;qnMwZbSb;|3Uvj|Iww#a2*@{2mJ^A2mOc3BXqe9{RjOA{RjO=mmb4) zZ1f*J_8(LA^N)`2@~PbfJ;p>KwGWifvU^8D9K$H_$=XQ#ZXbHfHEpHDCG|_H&lr1s zo5t}^h+QdJyh}3MbB3_gHB5iuHm#!6^8;qaD^sQ9_5V;ZEN>SHxO;Ncpqy`t24rt8 z)no93Ztq*K>G^B-&t+s^lH$er2jm0i?9*S&-OmhM5~=JKxJyAU=E9f>!W^<&T-b4` zAgljkLFPbx#S%ETuSI`4v11Rgzy%pV29SZaW&pgX(WQ_*Nt1B)zj-12!}r9z5NLQ_ zdC(-7=b00{_Hf7$#JmvxRp$#$I;pw7H|!qHe#eOYb7tSc0v~We29N<{02x3AkO5=> z89)ZA7*IT1LX_pdy)3`sG)taqy#O%Zpm5!Kf%0C5!NM?WLWLbvSN#&S8NLW(n7&k^ z9QD!z?$u0;?{luRsH zooNnZeCMb|ZwcuSFtbc&_FBfnIQI#1#-I={S9H3hD2gbe118<#PJeOMB2szx!1(eg zn+nxD1xH}M0s{g&#{qMitWAcbrx|t9{|fV?YK{Y#Pe7M*b+q=eEnwb;P6>)f5%(bd z;l2*nQkDMWApM1glSv!U;>!`4a@s6 z|JROR(Eri@(f>7=KdeUoNB@WVAIAR%R1d)T|7i?>O>d=>ORM)364x z{KxVi+kXs81K9raGzP@@592?K{~9j)*|k{y8A+)KWzUoEDd1%kMTdo{}}({_+Qxn8}I+B#(%{7zYT}~*#8IHf7$V0ar_?x z(gDW*82@AZkMTdo{}}&c{EzX!hR|QN8r%O3tL+#2|38iWu>U{y|Hu9x*#86je`t;X zs>*+y|HqKpf1Y9fAIUYC|Ld;u*9*LKW*0ABE(b^q2{5Ob6z2cB6LFvRpLCPk{~7)wq7d)zE_+}TD7#NW0KtX? zc@YUwJ|bTH(~$n<>h!mU^luOI|8*!;4(jk&IT;XaUGlV#+@Gpm|xbUq&L6nAbetm&7>)i<2FL#a9dn z$&MkC6z4F-Y(nmmo^#ddzZTLyn^M!)?;rTWqhM32N5SSRhJ{Tj{qKHvYL_6zePPK- z&4~|N!uLu@WV~#=+f+e?-2^`EKGD!1qz*w$gb~Ri&ePQCzYNkp5$6AXHFxKay;HuV zy;H*t3NCO>eX=4R?I=zfIPcD(M$`XDylfn#ztAAl-(QvfYmLd(TIqj5mHxYaG_Szo&;Z7N8q0om1D5}W=lxj!!}=eV|5*NG`H$s4 z-v7hSzomt^FQW)tp6LH2C)8*^?$7YWBHHuf2{v=1%Md;8D80s^*^ltVf=^jAI5(e z|6%-x@gK&2c>hO}1~C4|_#fMU4Nn6Y|6}}*@ju4@82@AZuPOFp*JJ!=cx6Af|5la# z*#8H|f5iS@T=tLtZ(w8pvfhvWkN%JKf2{vw{U7W9SpUcRKUV;V^?$7YTsB zmE@9YV1R4#$y)n(M{(l7xsA;Kv@Kdj&So$}$FGo_d*d_l#Wxm?;fKfOb)o+MX~lu-9~k(vAh7@vN$A<`e;L zLZK7G28KjG2e4U!Cx?iU{Nb^}sUF>iMC$nH%#j=3ig{{Yxc- z*3Z9<<-g|U@AVVLkGA63@!;~T#*XpxC&UQe8W9UKc$xC?uOAX(8Zy@Jjex~B|GpKo zAvCaa_?`ds@_k?MwufKziOh@1u{{=Bxq4nT^O&0y6rVieaOW=b&KcWupK~E0Xvm!S z@jZLJ*r}K8$LH4ghJCZ;&hovV&wFpTmG>{N`l|Va|8X}?&V4B)PgKNI@Y9xir&xQ1 z{W0uljIcDy#G$ z`Aqb%uyhLZSAw{c(@^;Z?}E>ZeIGuQ7RJlHZ_8x;KC%|a^gA}pm`umNW-<`b{lOQp zvQ+*SdFXbBJ;S7*?HxS$#utUBV?!5c zC_EhUQLy6z$Iy>+(Cr`G9vsu34BWmG64GwS5+7fu^r%1c`<{!;3*8%> zpD(#uGDESTD18#7`tPEo+#gni?kp=kf3mFj_$v3j($s9>qtv;)xYWc4P70rVS^L35 z_nHeYE*s{%+obT_4hg0N|C-By^}uvRpQB;&B?T!_tLA*NATsre*yO={r%TTi{|}AS6p{b{ literal 0 HcmV?d00001 diff --git a/inno_setup/logos/logo_small.bmp b/inno_setup/logos/logo_small.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e8c4cf414060346bc2f6fec952dafdc856621548 GIT binary patch literal 9294 zcmd6rO>Z1U5Qb;>5+v-61hJHG28lBV2pk}>lv5Ip`~eO@!a3wXeB;lcfUVfG;5bo` zzpy24Q6hdqkYj8P+}QQOa`RSKcXjp0%&=Z8$faV=)G}07}poa!@+pSC7i)ARjFi4T5XjQILDO_XHNEiF~+PN znzx^tnGG|0R^w+;!mjKXaE|NQ(NEQQxf(53<0Z0@HS#%vCL5Qgq#EK6s*^ug!CC)h zsz;`Javt`WP%YvthP= zte;>zc{QGTB%7bvzLXFGfQ@02R;e~|0;7QhVgkm&D?&A0Y5%PC`7Yh%jzH#3I-)pb zy+;@sZPdz~{8Ex>$DKG^_N58&1hvE&lw<%AjY*^oV6pfSXKCDQq&mfaodfNJ!wE(PSO1yfu1I zp^Hu%cjo+1oxFUAb93dDseZOsQ0z`H?DhTCSi za}HK-npa2k()-8%tR6nAkDkAVy^v?u{{91;gBzy0YO2pn^{Fl4G+AfDM`m@CI9Cpz zRlj~+ZGJD*3^UI~RVt2hK~kOm)rlu6NmdSHg9AL5vGN!=vX!xP3Rag}9ou zHdPm9_wE-sTY38Gb;O6meivsGNo#xyoQvR`n@~?hDB=q$M}!koE7!A^${XP|w>mwU zvu}r<`i0Xl4LHZO>KyO4bDn9??^dLzANMcR-1D81MBZoJ!dt{~C+{^{i9A1>^wgqh zzx5R&Jqs$Sfp+7|cplQdh^oF(J?Czn7T3FDv$Rf0Pp+Fliz-KivthkQ6H;r~s_nwS zj(fU}ls;}iJzi%u8h7k|df{v}LPlx&5%&H3Bu>mv;3Wn;W|lH>gr6Ve{d1f4&*J>- z;K>PdP6iM#0niS^NTzNoj(ehK6GmqodhXJC5997-k@1b@p|loJZBXXtRC@B{Y@VWO zUn+JTD<<$Qj?B;D(TjYapK#nW;CNqZrXp2wm^PiKDlU4K*ZbL)l3qudp3#VxUZI#E zoKuZ^ht9-VKHrNB>2PPSh6Le!opH~wJLV^76X2wpk}FQFXExu;8)ZN4o29h9-;MY8z!LX3=x%b=0zDC7d$2`OxQ)9Ny;0K2PiD9M8>oUy4++{YH_5 ztyEQdo-b#7zDw6lTM?Y@2>p*J??e?0d+i`-2eap literal 0 HcmV?d00001 diff --git a/inno_setup/logos/welcome-dialog.bmp b/inno_setup/logos/welcome-dialog.bmp new file mode 100755 index 0000000000000000000000000000000000000000..0f37863d42bdec27c98178594ef98968ad04eeb8 GIT binary patch literal 981958 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 literal 0 HcmV?d00001 diff --git a/inno_setup/scripts/boolean_checks.iss b/inno_setup/scripts/boolean_checks.iss new file mode 100755 index 000000000..c08738f37 --- /dev/null +++ b/inno_setup/scripts/boolean_checks.iss @@ -0,0 +1,66 @@ +#ifndef BOOLEAN_CHECKS_INCLUDED +#define BOOLEAN_CHECKS_INCLUDED + +#include "get_constants.iss" + +[Code] +// Check if we should update the Java version: +// True if NewMajorVersion > UsersMajorVersion or if UsersMajorVersion == 1.8 (Java 8) +function ShouldUpdateJavaVersion(): Boolean; +var + CurrentVersion: String; + CurrentMajorVersion: Integer; + NewMajorVersion: Integer; +begin + // Convert our new version to integer for comparison + NewMajorVersion := StrToInt('{#ProductMajorVersion}'); + + // Check if the registry key exists + if RegQueryStringValue(HKLM, 'SOFTWARE\JavaSoft\' + '{#ProductCategory}', 'CurrentVersion', CurrentVersion) then + begin + // Special case: Always update if current version is 1.8 + if CurrentVersion = '1.8' then + Result := True + else + begin + // Try to convert the existing version to an integer for comparison + // If conversion fails, the default value of 0 will be used + CurrentMajorVersion := StrToIntDef(CurrentVersion, 0); + + // Update only if our version is higher + Result := NewMajorVersion > CurrentMajorVersion; + end; + end + else + begin + // Key doesn't exist, so we should update + Result := True; + end; +end; + +// Reads local INI file to check if a task was selected during installation +// During installation: INI file is not needed yet, task is equivalent to WizardIsTaskSelected +// During uninstallation: INI file is read to determine keys + env vars to remove +function WasTaskSelected(TaskName: string): Boolean; +var + TaskValue: string; + TaskStateFile: string; +begin + // During installation, use WizardIsTaskSelected + if not IsUninstaller then + Result := WizardIsTaskSelected(TaskName) + else + begin + // During uninstallation, read from INI file + TaskStateFile := ExpandConstant('{#IniFile}'); + if FileExists(TaskStateFile) then + begin + TaskValue := GetIniString('Tasks', TaskName, '0', TaskStateFile); + Result := TaskValue = '1'; + end + else + Result := False; + end; +end; + +#endif \ No newline at end of file diff --git a/inno_setup/scripts/get_constants.iss b/inno_setup/scripts/get_constants.iss new file mode 100755 index 000000000..31d44ae48 --- /dev/null +++ b/inno_setup/scripts/get_constants.iss @@ -0,0 +1,38 @@ +#ifndef GET_CONSTANTS_INCLUDED +#define GET_CONSTANTS_INCLUDED + +; This file contiains helper functions that retrieve constants based on the installation mode + +[Code] +// Returns appropriate registry root based on installation mode +// (returns an int representing an enum) +function GetRegistryRoot(): Integer; +begin + if IsAdminInstallMode then + Result := HKLM + else + Result := HKCU; +end; + +// Returns path to Registry Key that contains environment variable based on installation mode +function GetEnvironmentRegPath(): string; +begin + if IsAdminInstallMode then + Result := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment' + else + Result := 'Environment'; +end; + +// Returns the default installation directory based on the installation mode and system architecture +function GetDefaultDir(Param: string): string; +begin + if IsAdminInstallMode then + // Here {commonpf}='C:\Program Files' for x64, aarch64, and x86 Archs since + // 'ArchitecturesInstallIn64BitMode=x64compatible arm64' was set in [Setup] + Result := ExpandConstant('{commonpf}\{#Vendor}\{#ProductFolder}') + else + // {userpf}='C:\Users\\AppData\Local\Programs' + Result := ExpandConstant('{userpf}\{#Vendor}\{#ProductFolder}'); +end; + +#endif diff --git a/inno_setup/scripts/install_handler.iss b/inno_setup/scripts/install_handler.iss new file mode 100755 index 000000000..f60116263 --- /dev/null +++ b/inno_setup/scripts/install_handler.iss @@ -0,0 +1,140 @@ +#ifndef INSTALL_HANDLER_INCLUDED +#define INSTALL_HANDLER_INCLUDED + +; This file contains the main installation logic and some helper functions + +#include "get_constants.iss" +#include "boolean_checks.iss" + +[Code] +// Store the user's task choices + metadata in an INI file in the installation directory +// This allows us to read the task selections during uninstallation +procedure StoreTaskSelections(TaskName: string); +var + TaskStateFile: string; +begin + // Store each task selection state in an INI file during installation + TaskStateFile := ExpandConstant('{#IniFile}'); + + // Add metadata to the INI file only if TaskName is 'METADATA' + if TaskName = 'METADATA' then + begin + SetIniString('Metadata', 'InstallDate', GetDateTimeString('yyyy/mm/dd hh:nn:ss', #0, #0), TaskStateFile); + SetIniString('Metadata', 'Version', '{#FullJdkVersion}', TaskStateFile); + end + // Create the INI file with task selections + else if WizardIsTaskSelected(TaskName) then + SetIniString('Tasks', TaskName, '1', TaskStateFile) + else + SetIniString('Tasks', TaskName, '0', TaskStateFile); +end; + +// Add the JDK to either the System or User PATH environment variable. +procedure AddToPath(AppBinPath: string; EnvRegKey: string; RegRoot: Integer); +var + UserPath: string; +begin + // Read current PATH + if not RegQueryStringValue(RegRoot, EnvRegKey, 'PATH', UserPath) then + UserPath := ''; + + // Check if our path entry is already in PATH (returns 0 if not found) + if Pos(AppBinPath, UserPath) = 0 then + begin + // Prepend our path entry to PATH + if UserPath <> '' then + UserPath := AppBinPath + ';' + UserPath + else + // If PATH is empty, just set it to our path entry + UserPath := AppBinPath; + + // Write back to registry + RegWriteStringValue(RegRoot, EnvRegKey, 'PATH', UserPath); + end; +end; + +// Uninstall the previous version of the same openJDK package if it exists +// Logs if /LOG is passed into compile cli, or if SetupLogging=yes in [Setup] section +// Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default +procedure UninstallPreviousVersion(); +var + UninstallKey: string; + UninstallString: string; + ResultCode: Integer; + DisplayName: string; + RegistryRoots: array[0..1] of Integer; + RootNames: array[0..1] of string; + i: Integer; + CurrentRoot: Integer; + RootName: string; +begin + // Initialize arrays for registry roots and their names + RegistryRoots[0] := HKLM; + RegistryRoots[1] := HKCU; + RootNames[0] := 'system'; + RootNames[1] := 'user'; + + // All EXE uninstall strings are stored here, regardless of vendor + UninstallKey := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); + + // Loop through both HKLM and HKCU + for i := 0 to 1 do + begin + CurrentRoot := RegistryRoots[i]; + RootName := RootNames[i]; + + if RegQueryStringValue(CurrentRoot, UninstallKey, 'UninstallString', UninstallString) then + begin + if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayName', DisplayName) then + begin + Log('Found previous ' + RootName + ' installation: ' + DisplayName); + end; + Log('Uninstall string (with quotes): ' + UninstallString); + Log('Uninstall string (quotes removed): ' + RemoveQuotes(UninstallString)); + + // Run the uninstaller silently (the Uninstall string has quotes that we need to remove) + if Exec(RemoveQuotes(UninstallString), '/SILENT /NORESTART', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + begin + Log('Previous ' + RootName + ' installation uninstalled successfully. Result code: ' + IntToStr(ResultCode)); + end + else + begin + Log('Failed to uninstall previous ' + RootName + ' installation. Result code: ' + IntToStr(ResultCode)); + end; + end + else + begin + Log('No previous ' + RootName + ' installation found.'); + end; + end; +end; + +// This function defines installation logic at each step of the installation process: +// ssInstall - just before the actual installation starts +// ssPostInstall - just after the actual installation finishes +// ssDone - just before Setup terminates after a successful install +// For more info, see the CurStepChanged section in https://jrsoftware.org/ishelp/index.php?topic=scriptevents +procedure CurStepChanged(CurStep: TSetupStep); +begin + // Store task selections just before the actual installation starts + if CurStep = ssInstall then + begin + // Uninstall previous version if it exists + UninstallPreviousVersion(); + end + // Store task selections just after the actual installation finishes but before registry entries are created + else if CurStep = ssPostInstall then + begin + StoreTaskSelections('pathMod'); + StoreTaskSelections('jarfileMod'); + StoreTaskSelections('javaHomeMod'); + StoreTaskSelections('javasoftMod'); + StoreTaskSelections('METADATA'); + + // Add {app}\bin to PATH only if the user requested it + if WasTaskSelected('pathMod') then + AddToPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); + end; +end; + +#endif \ No newline at end of file diff --git a/inno_setup/scripts/uninstall_handler.iss b/inno_setup/scripts/uninstall_handler.iss new file mode 100755 index 000000000..11e2ab872 --- /dev/null +++ b/inno_setup/scripts/uninstall_handler.iss @@ -0,0 +1,58 @@ +#ifndef UNINSTALL_HANDLER_INCLUDED +#define UNINSTALL_HANDLER_INCLUDED + +; This file contains the main uninstallation logic and some helper functions + +#include "get_constants.iss" +#include "boolean_checks.iss" + +[Code] +procedure RemoveFromPath(AppBinPath: string; EnvRegKey: string; RegRoot: Integer); +var + UserPath: string; + PathEntries: TArrayOfString; + i: Integer; + NewPath: string; +begin + // Read current PATH + if not RegQueryStringValue(RegRoot, EnvRegKey, 'PATH', UserPath) then + Exit; + + // Split PATH into individual entries, excluding empty entries + PathEntries := StringSplit(UserPath, [';'], stExcludeEmpty); + NewPath := ''; + + // Rebuild PATH without our entry + for i := 0 to GetArrayLength(PathEntries) - 1 do + begin + if PathEntries[i] <> AppBinPath then + begin + if NewPath <> '' then + NewPath := NewPath + ';' + PathEntries[i] + else + // Initialize NewPath with the first valid entry + NewPath := PathEntries[i]; + end; + end; + + // Write back to registry + RegWriteStringValue(RegRoot, EnvRegKey, 'PATH', NewPath); +end; + +// This function defines uninstallation logic at each step of the uninstallation process: +// usUninstall - just before the actual uninstallation starts +// usPostUninstall - just after the actual uninstallation finishes +// usDone - just before process terminates after a successful uninstall +// For more info, see the CurStepChanged and TUninstallStep sections in https://jrsoftware.org/ishelp/index.php?topic=scriptevents +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + // Action is performed right before uninstallation starts + if CurUninstallStep = usUninstall then + begin + // Remove {app}\bin from PATH only if added during installation + if WasTaskSelected('pathMod') then + RemoveFromPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); + end; +end; + +#endif \ No newline at end of file diff --git a/inno_setup/tranlsations/default.iss b/inno_setup/tranlsations/default.iss new file mode 100755 index 000000000..e2dcf57ff --- /dev/null +++ b/inno_setup/tranlsations/default.iss @@ -0,0 +1,81 @@ +; This file contains translations for all text in the resulting EXE installer. +; [Languages]: contains the list of languages we support. Inno Setup uses the compiler to translate default installer text. +; [CustomMessages]: contains the list of translations for the custom tasks that the user can select during installation. + +[Languages] +Name: "English"; MessagesFile: "compiler:Default.isl" +Name: "German"; MessagesFile: "compiler:Languages\German.isl" +Name: "Spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "French"; MessagesFile: "compiler:Languages\French.isl" +Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +; Note: ChineseTW and ChineseCN still need translations for certain progress-bar screen messages +Name: "ChineseTW"; MessagesFile: "compiler:Languages\Unofficial\ChineseTraditional.isl" +Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplified.isl" + +[CustomMessages] +; Notes: +; 1) All translations in the intial PR were pulled directly from the wix MSI installer translation files (Jul 2025) +; 2) Any missing translations will default to English +; 3) When testing translations, the `Yes` and `No` buttons will always be in the language of the user's machine (regardless of the selected language in the installer) +; 4) All commented out translations were made by copilot and need to be verified before using/uncommenting +; 5) Translation entries allow us to have input arguments. They are specified as %1, %2, etc. + +; For a list of default custom messages (Translated by Inno Setup), see: https://jrsoftware.org/ishelp/index.php?topic=custommessagessection +; Examlpe: we are using AssocFileExtension from this list + +; Custom task descriptions - English (default) +PathModDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. +JavaHomeModDesc=Sets or overrides JAVA_HOME environment variable with the JDK installation directory. +JavaSoftModDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. +PathModTitle=Modify PATH variable +JavaHomeModTitle=Set or override JAVA_HOME variable +FileAssocTitle=Associate .jar +RegKeysTitle=JavaSoft (Oracle) registry keys + +German.PathModDesc=In die PATH-Umgebungsvariable einfügen. +German.JavaHomeModDesc=Als JAVA_HOME-Umgebungsvariable verwenden. +; German.JavaSoftModDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. +German.PathModTitle=Zum PATH hinzufügen +German.JavaHomeModTitle=JAVA_HOME-Variable konfigurieren +; German.FileAssocTitle=.jar-Datei verknüpfen +; German.RegKeysTitle=JavaSoft (Oracle) Registrierungsschlüssel + +Spanish.PathModDesc=Añadir a la variable de entorno PATH. +Spanish.JavaHomeModDesc=Establecer la variable de entorno JAVA_HOME. +Spanish.JavaSoftModDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. +Spanish.PathModTitle=Añadir al PATH +Spanish.JavaHomeModTitle=Establecer la variable JAVA_HOME +Spanish.FileAssocTitle=Asociar .jar +Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) + +French.PathModDesc=Ajouter à la variable d'environnement PATH. +French.JavaHomeModDesc=Définir la variable d'environnement JAVA_HOME. +French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Résintaller Oracle Java si besoin +French.PathModTitle=Ajouter au PATH +French.JavaHomeModTitle=Définir la variable JAVA_HOME +French.FileAssocTitle=Associer les .jar +French.RegKeysTitle=Clés de registre JavaSoft (Oracle) + +; Japanese.PathModDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 +; Japanese.JavaHomeModDesc=JDKインストールディレクトリでJAVA_HOME環境変数を設定または上書きします。 +; Japanese.JavaSoftModDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 +; Japanese.PathModTitle=PATH変数を変更 +; Japanese.JavaHomeModTitle=JAVA_HOME変数を設定または上書き +; Japanese.FileAssocTitle=.jarを関連付け +; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー + +ChineseCN.PathModDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. +ChineseCN.JavaHomeModDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. +; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 +ChineseCN.PathModTitle=修改 PATH 变量值. +ChineseCN.JavaHomeModTitle=设置或重写 JAVA_HOME 变量. +; ChineseCN.FileAssocTitle=关联 .jar +; ChineseCN.RegKeysTitle=JavaSoft (Oracle) 注册表项 + +ChineseTW.PathModDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. +ChineseTW.JavaHomeModDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME 環境變數值. +; ChineseTW.JavaSoftModDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 +ChineseTW.PathModTitle=修改 PATH 變數值 +ChineseTW.JavaHomeModTitle=設定或重寫 JAVA_HOME 變量 +; ChineseTW.FileAssocTitle=關聯 .jar +; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 \ No newline at end of file From cbe008da21ae6999990d4fe6e29b144373be5d48 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Mon, 11 Aug 2025 17:47:58 -0700 Subject: [PATCH 02/49] cleanup --- inno_setup/create_exe.iss | 12 ++++++------ inno_setup/scripts/get_constants.iss | 2 -- inno_setup/scripts/install_handler.iss | 2 -- inno_setup/scripts/uninstall_handler.iss | 2 -- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/inno_setup/create_exe.iss b/inno_setup/create_exe.iss index a0b3eebc9..ba409ba7e 100755 --- a/inno_setup/create_exe.iss +++ b/inno_setup/create_exe.iss @@ -18,10 +18,10 @@ #define FullJdkPlusVersion ProductMajorVersion + "." + ProductMinorVersion + "." + ProductMaintenanceVersion + "+" + ProductBuildVersion #define AppURL "https://adoptium.net/temurin/releases" #define OutputExeName "OpenJDK" + ProductMajorVersion + "-" + ProductCategory + "_" + Architecture + "_windows_" + JVM + FullJdkVersion -#define ProductFolder ProductCategory "-" + FullJdkVersion + "-" + JVM +#define ProductFolder ProductCategory + "-" + FullJdkVersion + "-" + JVM ; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -#define AppName VendorBranding + " " + {code:Uppercase, ProductCategory} " with " + JVM + " " + FullJdkPlusVersion + " (" + Architecture + ")" +#define AppName VendorBranding + " " + Uppercase(ProductCategory) + " with " + JVM + " " + FullJdkPlusVersion + " (" + Architecture + ")" ; TODO: Decide on AppID approach #define AppId "{{767A46AB-EDEE-4F76-8987-842A6397F37A}" @@ -32,7 +32,7 @@ ; Include external files after definitions so those definitions can be used in the included files -#include "translations\default.iss" +#include "tranlsations\default.iss" #include "scripts\install_handler.iss" #include "scripts\uninstall_handler.iss" #include "scripts\boolean_checks.iss" @@ -66,7 +66,7 @@ AppUpdatesURL={#AppURL} ;; Dirs and logos OutputDir={#OutputDir} OutputBaseFilename={#OutputExeName} -SourceDir={#SourceDir} +; SourceDir={#SourceDir} ; Setting default installDir based on the install mode DefaultDirName={code:GetDefaultDir} ; Enable the user to select the installation directory every time @@ -108,8 +108,8 @@ Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; Name: "{autoprograms}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}" [Files] -Source: "jdk-17.0.15+6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname -; Source: "logos\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +; Source: "jdk-17.0.15+6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +Source: "logos\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname [InstallDelete] Type: filesandordirs; Name: "{app}" diff --git a/inno_setup/scripts/get_constants.iss b/inno_setup/scripts/get_constants.iss index 31d44ae48..8eca8fa05 100755 --- a/inno_setup/scripts/get_constants.iss +++ b/inno_setup/scripts/get_constants.iss @@ -1,8 +1,6 @@ #ifndef GET_CONSTANTS_INCLUDED #define GET_CONSTANTS_INCLUDED -; This file contiains helper functions that retrieve constants based on the installation mode - [Code] // Returns appropriate registry root based on installation mode // (returns an int representing an enum) diff --git a/inno_setup/scripts/install_handler.iss b/inno_setup/scripts/install_handler.iss index f60116263..f7087e5e0 100755 --- a/inno_setup/scripts/install_handler.iss +++ b/inno_setup/scripts/install_handler.iss @@ -1,8 +1,6 @@ #ifndef INSTALL_HANDLER_INCLUDED #define INSTALL_HANDLER_INCLUDED -; This file contains the main installation logic and some helper functions - #include "get_constants.iss" #include "boolean_checks.iss" diff --git a/inno_setup/scripts/uninstall_handler.iss b/inno_setup/scripts/uninstall_handler.iss index 11e2ab872..e11ffd48f 100755 --- a/inno_setup/scripts/uninstall_handler.iss +++ b/inno_setup/scripts/uninstall_handler.iss @@ -1,8 +1,6 @@ #ifndef UNINSTALL_HANDLER_INCLUDED #define UNINSTALL_HANDLER_INCLUDED -; This file contains the main uninstallation logic and some helper functions - #include "get_constants.iss" #include "boolean_checks.iss" From f5f96953fb52a3d50b4efbce4b226a32c47b7af1 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Tue, 12 Aug 2025 15:32:39 -0700 Subject: [PATCH 03/49] More parameterizing + cleanup. Also, added CreateEXE.ps1 --- inno_setup/CreateExe.ps1 | 263 ++++++++++++++++++ .../boolean_checks.iss | 0 .../get_constants.iss | 0 .../install_handler.iss | 2 +- .../uninstall_handler.iss | 0 inno_setup/ps_scripts/Helpers.ps1 | 171 ++++++++++++ inno_setup/{ => templates}/create_exe.iss | 80 +++--- 7 files changed, 478 insertions(+), 38 deletions(-) create mode 100644 inno_setup/CreateExe.ps1 rename inno_setup/{scripts => inno_scripts}/boolean_checks.iss (100%) rename inno_setup/{scripts => inno_scripts}/get_constants.iss (100%) rename inno_setup/{scripts => inno_scripts}/install_handler.iss (95%) rename inno_setup/{scripts => inno_scripts}/uninstall_handler.iss (100%) create mode 100644 inno_setup/ps_scripts/Helpers.ps1 rename inno_setup/{ => templates}/create_exe.iss (78%) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 new file mode 100644 index 000000000..a36f8c88d --- /dev/null +++ b/inno_setup/CreateExe.ps1 @@ -0,0 +1,263 @@ +<# +.SYNOPSIS + Script to handle a zip file by either copying it from a local location or downloading it from a URL. + +.DESCRIPTION + This script automates the process of creating an EXE installer for OpenJDK distributions. It accepts either a local zip file path or a URL to a zip file (containing a zip file of the JDK binaries), extracts the contents, and prepares the necessary folder structure. This script is designed to be used with Inno Setup, a tool for creating Windows installers. First, a template Inno Setup script is modified with the provided parameters. The script then generates an EXE installer package that can be used to install OpenJDK on Windows systems. If a signing cli command is provided, the script will also sign the resulting EXE package (Note: this is the only way to also sign the uninstall script that goes into the EXE). The script supports various parameters to customize the installer, such as application name, vendor information, architecture, and versioning details. + +.PARAMETER ZipFilePath + Optional. The local path to a zip file to be copied and unzipped. + +.PARAMETER ZipFileUrl + Optional. The URL of a zip file to be downloaded and unzipped. + +.PARAMETER ProductMajorVersion + Example: if the version is 17.0.16+8, this is 17 + +.PARAMETER ProductMinorVersion + Example: if the version is 17.0.16+8, this is 0 + +.PARAMETER ProductMaintenanceVersion + Example: if the version is 17.0.16+8, this is 16 + +.PARAMETER ProductPatchVersion + This is a number that comes between the maintenance and build numbers if it exists. + For most builds, this is 0. If this is a respin, it will be the respin number. + Examples: + - if the version is 17.0.16+8, this is 0 + - if the version is 17.0.8.1+1, this is 1 + +.PARAMETER ProductBuildNumber + Example: if the version is 17.0.16+8, this is 8 + +.PARAMETER ExeProductVersion + The full version of the JDK/EXE product. This is used to determine + Example: if the version is 17.0.16+8, this is "17.0.16.8" + +.PARAMETER Arch + Mostly used to determine default display names like $AppName and $OutputFileName. + Examples: x86, x64, arm, arm64, aarch64 + +.PARAMETER JVM + The JVM used in the JDK/JRE. This is used to determine default display names like $AppName and $OutputFileName. + Valid values: hotspot, openj9, dragonwell + +.PARAMETER ProductCategory + The category of the product, either jdk or jre. This is used to determine + default display names like $AppName and $OutputFileName, and Registry Key behavior. + Valid values: jdk, jre + +.PARAMETER AppName + Optional. The name of the App. + Example: "Eclipse Temurin JDK with Hotspot 17.0.15+6 (x64)" + Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion+$ProductBuildNumber ($Arch)" + +.PARAMETER Vendor + Optional. Default: Eclipse Adoptium + +.PARAMETER VendorBranding + Optional. Helps determine default values for $AppName + but goes unused if those are both provided. + Default: Eclipse Temurin + +.PARAMETER VendorBrandingLogo + Optional. The path to the ".ico" file to be used as the logo in the installer. + This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. + Default: "logos\logo.ico" + +.PARAMETER VendorBrandingDialog + Optional. The path to the ".bmp" file to be used as the welcome dialog in the installer. + This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. + Default: "logos\welcome-dialog.bmp" + +.PARAMETER VendorBrandingSmallIcon + Optional. The path to the ".bmp" file to be used as the small icon in the installer. + This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. + Default: "logos\logo_small.bmp" + +.PARAMETER OutputFileName + Optional. The name of the output file. Note: inno setup will automatically add the '.exe' file extension + Default: + "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch-windows-$JVM-$ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.ProductPatchVersion.$ProductBuildNumber" + +.PARAMETER License + Optional. The Path to the license file. This can either be a full path to any file, or a relative path to a license file in the inno_setup/licenses folder. + Default: "licenses/license-GPLv2+CE.en-us.rtf" + +.EXAMPLE + # Only mandatory inputs are defined here + .\CreateMsix.ps1 ` + -ZipFilePath "C:\path\to\file.zip" ` + -AppName "Eclipse Temurin JDK with Hotspot 17.0.15+6 (x64)" ` + -ProductMajorVersion 17 ` + -ProductMinorVersion 0 ` + -ProductMaintenanceVersion 15 ` + -ProductBuildNumber 6 ` + -Arch "x64" ` + +.EXAMPLE + # All inputs are defined here + .\CreateMsix.ps1 ` + # Mandatory inputs + -ZipFileUrl "https://example.com/file.zip" ` + -ProductMajorVersion 21 ` + -ProductMinorVersion 0 ` + -ProductMaintenanceVersion 7 ` + -ProductBuildNumber 6 ` + -Arch "aarch64" ` + # Optional inputs: These are the defaults that will be used if not specified + -Vendor "Eclipse Adoptium" ` + -VendorBranding "Eclipse Temurin" ` + -AppName "Eclipse Temurin 17.0.15+6 (x64)" ` + # Optional Inputs: omitting these inputs will cause their associated process to be skipped + -OutputFileName "OpenJDK21-jdk_x64_windows_hotspot-21.0.8.0.9" ` + +.NOTES + Ensure that you have downloaded the Windows SDK (typically through installing Visual Studio). For more information, please see the #Dependencies section of the README.md file. After doing so, please modify the following environment variables if the defaults shown below are not correct: + $Env:WIN_SDK_FULL_VERSION = "10.0.22621.0" + $Env:WIN_SDK_MAJOR_VERSION = "10" +#> + +param ( + [Parameter(Mandatory = $false)] + [string]$ZipFilePath, + + [Parameter(Mandatory = $false)] + [string]$ZipFileUrl, + + [Parameter(Mandatory = $true)] + [int]$ProductMajorVersion, + + [Parameter(Mandatory = $true)] + [int]$ProductMinorVersion, + + [Parameter(Mandatory = $true)] + [int]$ProductMaintenanceVersion, + + [Parameter(Mandatory = $true)] + [int]$ProductPatchVersion, + + [Parameter(Mandatory = $true)] + [int]$ProductBuildNumber, + + [Parameter(Mandatory = $true)] + [string]$ExeProductVersion, + + [Parameter(Mandatory = $true)] + [string]$Arch, + + [Parameter(Mandatory = $true)] + [ValidateSet("hotspot", "openj9", "dragonwell")] + [string]$JVM, + + [Parameter(Mandatory = $true)] + [ValidateSet("jdk", "jre")] + [string]$ProductCategory = "jdk", + + [Parameter(Mandatory = $false)] + [string]$AppName = "", + + [Parameter(Mandatory = $false)] + [string]$Vendor = "Eclipse Adoptium", + + [Parameter(Mandatory = $false)] + [string]$VendorBranding = "Eclipse Temurin", + + [Parameter(Mandatory = $false)] + [string]$VendorBrandingLogo = "logos\logo.ico", + + [Parameter(Mandatory = $false)] + [string]$VendorBrandingDialog = "logos\welcome-dialog.bmp", + + [Parameter(Mandatory = $false)] + [string]$VendorBrandingSmallIcon = "logos\logo_small.bmp", + + [Parameter(Mandatory = $false)] + [string]$OutputFileName, + + [Parameter(Mandatory = $false)] + [string]$License = "licenses/license-GPLv2+CE.en-us.rtf" +) + +# Get the path to msix folder (parent directory of this script) +$InnoSetupWorkDirPath = Split-Path -Parent $MyInvocation.MyCommand.Path + +# Find and source the Helpers.ps1 script located in the scripts folder to get access to helper functions +$HelpersScriptPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "ps_scripts\Helpers.ps1" +if (-not (Test-Path -Path $HelpersScriptPath)) { + throw "Error: The Helpers.ps1 script was not found at '$HelpersScriptPath'." +} +. $HelpersScriptPath +# Validate the inputs +## Ensure that either a local zip file path or a URL is provided, but not both +ValidateZipFileInput -ZipFilePath $ZipFilePath -ZipFileUrl $ZipFileUrl + +# Set values needed in file +$CapitalizedJVM = CapitalizeString ` + -InputValue $JVM ` + -AllLetters + +$VersionMajorToMaintenance = $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion + +# Set default values if optional parameters are not provided +$AppName = SetDefaultIfEmpty ` + -InputValue $AppName ` + -DefaultValue "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $VersionMajorToMaintenance+$ProductBuildNumber ($Arch)" + +## Note: inno setup will add the '.exe' file extension automatically +$OutputFileName = SetDefaultIfEmpty ` + -InputValue $OutputFileName ` + -DefaultValue "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch_windows_$JVM-$VersionMajorToMaintenance.$ProductPatchVersion.$ProductBuildNumber" + +# Clean the srce, workspace, and output folders +$srcFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "src") +$workspaceFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "workspace") +$outputFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "output") +Write-Host "Folders cleaned: $srcFolder, $workspaceFolder, $outputFolder" + +# Download zip file if a URL is provided, otherwise use the local path +if ($ZipFileUrl) { + Write-Host "Downloading zip file from URL: $ZipFileUrl" + $ZipFilePath = DownloadFileFromUrl -Url $ZipFileUrl -DestinationDirectory $workspaceFolder +} +Write-Host "Using ZipFilePath: $ZipFilePath" +UnzipFile -ZipFilePath $ZipFilePath -DestinationPath $srcFolder + +# Move contents of the unzipped file to $srcFolder +# $unzippedFolder = Join-Path -Path $workspaceFolder -ChildPath (Get-ChildItem -Path $workspaceFolder -Directory | Select-Object -First 1).Name +# Move-Item -Path (Join-Path -Path $unzippedFolder -ChildPath "*") -Destination $srcFolder -Force +# Remove-Item -Path $unzippedFolder -Recurse -Force + +$exeTemplate = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" +$content = Get-Content -Path $exeTemplate + +# Replace all instances of placeholders with the provided values +$updatedContent = $content ` + -replace "", $AppName ` + -replace "", $Vendor ` + -replace "", $VendorBranding ` + -replace "", $ProductCategory ` + -replace "", $JVM ` + -replace "", $ProductMajorVersion ` + -replace "", $ProductMinorVersion ` + -replace "", $ProductMaintenanceVersion ` + # ProductPatchVersion + -replace "", $ProductBuildNumber ` + -replace "", $ExeProductVersion ` + -replace "", $OutputFileName ` + -replace "", "https://adoptium.net/" ` + -replace "", $VendorBrandingLogo ` + -replace "", $VendorBrandingDialog ` + -replace "", $VendorBrandingSmallIcon ` + -replace "", $License ` + -replace "", "signtool.exe" ` + # Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped + -replace "", "{{}}" ######################## + + +# Write the updated content to the new create_exe.iss file +$exeIssPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" +Set-Content -Path $exeIssPath -Value $updatedContent +Write-Host "create_exe.iss created at '$exeIssPath'" + + diff --git a/inno_setup/scripts/boolean_checks.iss b/inno_setup/inno_scripts/boolean_checks.iss similarity index 100% rename from inno_setup/scripts/boolean_checks.iss rename to inno_setup/inno_scripts/boolean_checks.iss diff --git a/inno_setup/scripts/get_constants.iss b/inno_setup/inno_scripts/get_constants.iss similarity index 100% rename from inno_setup/scripts/get_constants.iss rename to inno_setup/inno_scripts/get_constants.iss diff --git a/inno_setup/scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss similarity index 95% rename from inno_setup/scripts/install_handler.iss rename to inno_setup/inno_scripts/install_handler.iss index f7087e5e0..bd0e5b5a0 100755 --- a/inno_setup/scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -18,7 +18,7 @@ begin if TaskName = 'METADATA' then begin SetIniString('Metadata', 'InstallDate', GetDateTimeString('yyyy/mm/dd hh:nn:ss', #0, #0), TaskStateFile); - SetIniString('Metadata', 'Version', '{#FullJdkVersion}', TaskStateFile); + SetIniString('Metadata', 'Version', '{#ExeProductVersion}', TaskStateFile); end // Create the INI file with task selections else if WizardIsTaskSelected(TaskName) then diff --git a/inno_setup/scripts/uninstall_handler.iss b/inno_setup/inno_scripts/uninstall_handler.iss similarity index 100% rename from inno_setup/scripts/uninstall_handler.iss rename to inno_setup/inno_scripts/uninstall_handler.iss diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 new file mode 100644 index 000000000..8ff719555 --- /dev/null +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -0,0 +1,171 @@ +<# +.SYNOPSIS + Helper functions for OpenJDK EXE packaging scripts. + +.DESCRIPTION + This script provides utility functions for validating input, downloading files, unzipping archives, and handling signing parameters. + Intended for use in the OpenJDK EXE installer build process via Inno Setup. + +.NOTES + File Name: Helpers.ps1 + +#> + +# function ValidateMajorVersion { +# param( +# [Parameter(Mandatory=$true)] +# [int]$majorVersion +# ) + +# # Define valid major versions +# $validMajorVersions = @(11, 17, 21) + +# if ($validMajorVersions -contains $majorVersion) { +# Write-Host "The major version ($majorVersion) is valid." +# } else { +# Write-Host "The major version ($majorVersion) is NOT valid. Valid versions are: $($validVersions -join ', ')." +# exit 1 +# } +# } + +function ValidateZipFileInput { + param ( + [string]$ZipFilePath, + [string]$ZipFileUrl + ) + if (-not $ZipFilePath -and -not $ZipFileUrl) { + throw "Error: You must provide either -ZipFilePath or -ZipFileUrl." + } + elseif ($ZipFilePath -and $ZipFileUrl) { + throw "Error: You cannot provide both -ZipFilePath and -ZipFileUrl." + } + else { + Write-Host "ZipFile input validation passed." + } +} + +# function ValidateSigningInput { +# param ( +# [string]$SigningCertPath, +# [string]$SigningPassword +# ) +# if ( +# ($SigningPassword -and -not $SigningCertPath) -or +# ($SigningCertPath -and -not $SigningPassword) +# ) { +# throw "Error: Both SigningCertPath and SigningPassword must be provided together." +# } +# else { +# Write-Host "Signing input validation passed." +# } +# } + +function SetDefaultIfEmpty { + param ( + [string]$InputValue, + [string]$DefaultValue + ) + if (-not $InputValue) { + return $DefaultValue + } + else { + return $InputValue + } +} + +function DownloadFileFromUrl { + param ( + [string]$Url, + [string]$DestinationDirectory + ) + if (-not (Test-Path -Path $DestinationDirectory)) { + New-Item -ItemType Directory -Path $DestinationDirectory | Out-Null + } + $fileName = [System.IO.Path]::GetFileName($ZipFileUrl) + $downloadPath = Join-Path -Path $DestinationDirectory -ChildPath $fileName + + Write-Host "Downloading file from $Url to $DestinationDirectory" + + # download zip file (needs to be silent or it will print the progress bar and take ~30 times as long to download) + $OriginalLocalProgressPreference = $ProgressPreference + $ProgressPreference = 'SilentlyContinue' + Invoke-WebRequest -Uri $Url -OutFile $downloadPath + $ProgressPreference = $OriginalLocalProgressPreference + + return $downloadPath +} + +function UnzipFile { + param ( + [string]$ZipFilePath, + [string]$DestinationPath + ) + if (-not (Test-Path -Path $ZipFilePath)) { + throw "Error: Zip file not found at path: $ZipFilePath" + } + if (-not (Test-Path -Path $DestinationPath)) { + New-Item -ItemType Directory -Path $DestinationPath | Out-Null + } + Write-Host "Unzipping file $ZipFilePath to $DestinationPath" + + # Unzip file (needs to be silent or it will print the progress bar and take much longer) + $OriginalProgressPreference = $global:ProgressPreference + $global:ProgressPreference = 'SilentlyContinue' + Expand-Archive -Path $ZipFilePath -DestinationPath $DestinationPath -Force + $global:ProgressPreference = $OriginalProgressPreference +} + +function CheckForError { + param ( + [string]$ErrorMessage + ) + if ($LASTEXITCODE -ne 0) { + throw "Error: $ErrorMessage" + } +} + +function CapitalizeString { + param ( + [Parameter(Mandatory=$true)] + [string]$InputString, + [Parameter(Mandatory=$false)] + [switch]$AllLetters + ) + + if ([string]::IsNullOrEmpty($InputString)) { + return $InputString + } + + if ($AllLetters) { + # Capitalize all letters (uppercase) + return $InputString.ToUpper() + } else { + # Capitalize only the first letter + return $InputString.Substring(0, 1).ToUpper() + $InputString.Substring(1).ToLower() + } +} + +function Clear-TargetFolder { + param( + [string]$TargetFolder, + [string]$ExcludeSubfolder = $null + ) + if (-not (Test-Path -Path $TargetFolder)) { + New-Item -ItemType Directory -Path $TargetFolder | Out-Null + Write-Host "Created folder: $TargetFolder" + } + + if ($ExcludeSubfolder) { + Get-ChildItem -Path $TargetFolder -Recurse | Where-Object { + $_.FullName -notlike "*\$ExcludeSubfolder*" + } | Remove-Item -Recurse -Force + Write-Host "Cleaned $TargetFolder, excluding $ExcludeSubfolder." + } + else { + Get-ChildItem -Path $TargetFolder -Recurse | Remove-Item -Recurse -Force + Write-Host "Cleaned $TargetFolder." + } + + return $TargetFolder +} + diff --git a/inno_setup/create_exe.iss b/inno_setup/templates/create_exe.iss similarity index 78% rename from inno_setup/create_exe.iss rename to inno_setup/templates/create_exe.iss index ba409ba7e..7a1a3be58 100755 --- a/inno_setup/create_exe.iss +++ b/inno_setup/templates/create_exe.iss @@ -5,29 +5,34 @@ ; Modify this file to customize the installer behavior and options. ;------------------------------------------------------------------------------ -#define Vendor "Eclipse Adoptium" -#define VendorBranding "Eclipse Temurin" -#define ProductCategory "jdk" -#define Architecture "x64" -#define JVM "hotspot" -#define ProductMajorVersion "17" -#define ProductMinorVersion "0" -#define ProductMaintenanceVersion "15" -#define ProductBuildVersion "6" -#define FullJdkVersion ProductMajorVersion + "." + ProductMinorVersion + "." + ProductMaintenanceVersion + "." + ProductBuildVersion -#define FullJdkPlusVersion ProductMajorVersion + "." + ProductMinorVersion + "." + ProductMaintenanceVersion + "+" + ProductBuildVersion -#define AppURL "https://adoptium.net/temurin/releases" -#define OutputExeName "OpenJDK" + ProductMajorVersion + "-" + ProductCategory + "_" + Architecture + "_windows_" + JVM + FullJdkVersion -#define ProductFolder ProductCategory + "-" + FullJdkVersion + "-" + JVM - +#define AppName "" +#define Vendor "" +#define VendorBranding "" +#define ProductCategory "" +#define JVM "" +#define ProductMajorVersion "" +#define ProductMinorVersion "" +#define ProductMaintenanceVersion "" +#define ProductPatchVersion "" +#define ProductBuildNumber "" +#define ExeProductVersion "" +#define OutputExeName "" +#define AppURL "" +#define VendorBrandingLogo "" +#define VendorBrandingDialog "" +#define VendorBrandingSmallIcon "" +#define LicenseFile "" +#define SingingTool "" ; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -#define AppName VendorBranding + " " + Uppercase(ProductCategory) + " with " + JVM + " " + FullJdkPlusVersion + " (" + Architecture + ")" +#define AppId "" ; TODO: Decide on AppID approach -#define AppId "{{767A46AB-EDEE-4F76-8987-842A6397F37A}" +; "{{767A46AB-EDEE-4F76-8987-842A6397F37A}" + +; Define useful variables based off inputs +#define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM ; #define SourceDir "" #define OutputDir "output" -#define SetupIconFile "logos\logo.ico" #define IniFile '{app}\install_tasks.ini' @@ -42,7 +47,8 @@ ;; Inno settings ; $command="dotnet ${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:${env:WindowsCert}" -SignTool=signtool +; $command='dotnet $${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:400' +SignTool={#SingingTool} Uninstallable=yes Compression=lzma SolidCompression=yes @@ -57,7 +63,7 @@ ChangesEnvironment=yes ;; App info AppId={#AppId} AppName={#AppName} -AppVersion={#FullJdkVersion} +AppVersion={#ExeProductVersion} AppPublisher={#Vendor} AppPublisherURL={#AppURL} AppSupportURL={#AppURL} @@ -72,11 +78,11 @@ DefaultDirName={code:GetDefaultDir} ; Enable the user to select the installation directory every time UsePreviousAppDir=no UninstallFilesDir={app}\uninstall -SetupIconFile={#SetupIconFile} -LicenseFile=licenses\license-GPLv2+CE.en-us.rtf +LicenseFile={#LicenseFile} +SetupIconFile={#VendorBrandingLogo} ; Add these lines to change the banner images -WizardImageFile=logos\welcome-dialog.bmp -WizardSmallImageFile=logos\logo_small.bmp +WizardImageFile={#VendorBrandingDialog} +WizardSmallImageFile={#VendorBrandingSmallIcon} ;; Dialog settings DisableDirPage=no @@ -130,24 +136,24 @@ Type: files; Name: "{app}\install_tasks.ini" Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\"; \ ValueType: none; \ Flags: uninsdeletekeyifempty; -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}"; \ ValueType: none; \ Flags: uninsdeletekey; -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: string; ValueName: "Path"; ValueData: "{app}"; \ Flags: uninsdeletekey; -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ - ValueType: dword; ValueName: "Main"; ValueData: "1"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ + ValueType: dword; ValueName: "Main"; ValueData: "1"; \ Flags: uninsdeletekey; ; pathMod: Add Environment Path keys if the user requests them -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPath"; ValueData: "1"; \ Flags: uninsdeletekey; Check: WasTaskSelected('pathMod'); -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPathSetForSystem"; ValueData: "1"; \ Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('pathMod'); -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPathSetForUser"; ValueData: "1"; \ Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('pathMod'); @@ -172,13 +178,13 @@ Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open\command"; \ ; OR: decide that EXEs will no longer support JDK8 and remove this TODO ; javaHomeMod: Add JavaHome keys if the user requests them -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHome"; ValueData: "1"; \ Flags: uninsdeletekey; Check: WasTaskSelected('javaHomeMod'); -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHomeSetForSystem"; ValueData: "1"; \ Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('javaHomeMod'); -Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#FullJdkVersion}\{#JVM}\EXE"; \ +Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHomeSetForUser"; ValueData: "1"; \ Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('javaHomeMod'); ; Add JAVA_HOME env var for system-level environment variables (admin install) @@ -197,15 +203,15 @@ Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}"; \ Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); -Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#FullJdkVersion}"; \ +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; \ ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); ; The RuntimeLib key is only used by JREs, not JDKs #if ProductCategory == "JRE" Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); -Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#FullJdkVersion}"; \ + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); +Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); #endif From 4160f1d7f8eef2436c40bc499b4bc4e38cdb5566 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Tue, 12 Aug 2025 17:08:56 -0700 Subject: [PATCH 04/49] Ensured that upgrading and signing work as expected --- inno_setup/CreateExe.ps1 | 104 +++++++++++++++++++++++----- inno_setup/ps_scripts/Helpers.ps1 | 10 +++ inno_setup/templates/create_exe.iss | 6 +- 3 files changed, 98 insertions(+), 22 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index a36f8c88d..dcc9e4b44 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -84,16 +84,34 @@ Optional. The Path to the license file. This can either be a full path to any file, or a relative path to a license file in the inno_setup/licenses folder. Default: "licenses/license-GPLv2+CE.en-us.rtf" +.PARAMETER UpgradeCodeSeed + Optional. A seed string used to generate a deterministic PRODUCT_UPGRADE_CODE. + This is used to ensure that the PRODUCT_UPGRADE_CODE is consistent across builds. + If this is not provided, a random PRODUCT_UPGRADE_CODE will be generated. + Default: "" + +.PARAMETER SigningCommand + Optional. The command to sign the resulting EXE file. This is typically a command that + uses signtool.exe to sign the EXE file. If this is not provided, the EXE will not be signed. + See the following link for more info on input variables that can be used within the command: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool + Examples: + 'signtool.exe sign /fd SHA256 $f' + 'signtool.exe sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f' + Default: "" + .EXAMPLE # Only mandatory inputs are defined here .\CreateMsix.ps1 ` -ZipFilePath "C:\path\to\file.zip" ` - -AppName "Eclipse Temurin JDK with Hotspot 17.0.15+6 (x64)" ` -ProductMajorVersion 17 ` -ProductMinorVersion 0 ` - -ProductMaintenanceVersion 15 ` - -ProductBuildNumber 6 ` + -ProductMaintenanceVersion 16 ` + -ProductPatchVersion 0 + -ProductBuildNumber 8 ` + -ExeProductVersion "17.0.16.8" ` -Arch "x64" ` + -JVM "hotspot" ` + -ProductCategory "jdk" ` .EXAMPLE # All inputs are defined here @@ -102,20 +120,34 @@ -ZipFileUrl "https://example.com/file.zip" ` -ProductMajorVersion 21 ` -ProductMinorVersion 0 ` - -ProductMaintenanceVersion 7 ` - -ProductBuildNumber 6 ` + -ProductMaintenanceVersion 8 ` + -ProductPatchVersion 0 ` + -ProductBuildNumber 9 ` + -ExeProductVersion "21.0.8.9" ` -Arch "aarch64" ` + -JVM "hotspot" ` + -ProductCategory "jdk" ` # Optional inputs: These are the defaults that will be used if not specified + -AppName "Eclipse Temurin JDK with Hotspot 21.0.8.9 (aarch64)" ` -Vendor "Eclipse Adoptium" ` -VendorBranding "Eclipse Temurin" ` - -AppName "Eclipse Temurin 17.0.15+6 (x64)" ` - # Optional Inputs: omitting these inputs will cause their associated process to be skipped - -OutputFileName "OpenJDK21-jdk_x64_windows_hotspot-21.0.8.0.9" ` + -VendorBrandingLogo "logos\logo.ico" ` + -VendorBrandingDialog "logos\welcome-dialog.bmp" ` + -VendorBrandingSmallIcon "logos\logo_small.bmp" ` + -OutputFileName "OpenJDK21-jdk_aarch64_windows_hotspot- + -License "licenses/license-GPLv2+CE.en-us.rtf" ` + # Additional Optional Inputs: Omitting these inputs will cause their associated process to be skipped + -SigningCommand "signtool.exe sign /f C:\path\to\cert" .NOTES - Ensure that you have downloaded the Windows SDK (typically through installing Visual Studio). For more information, please see the #Dependencies section of the README.md file. After doing so, please modify the following environment variables if the defaults shown below are not correct: - $Env:WIN_SDK_FULL_VERSION = "10.0.22621.0" - $Env:WIN_SDK_MAJOR_VERSION = "10" + Ensure that you have downloaded Inno Setup (can be done through winget or directly from their website: https://jrsoftware.org/isdl.php). For more information, please see the #Dependencies section of the README.md file. + If you do not have inno setup installed, you can install it using the following command: + winget install --id JRSoftware.InnoSetup -e -s winget --scope + Or directly by modifying this link to the latest version: + https://files.jrsoftware.org/is/6/innosetup-#.#.#.exe + Example: https://files.jrsoftware.org/is/6/innosetup-6.5.0.exe + Afterwards, please set the following environment variable to the path of the inno setup executable (if the default, machine-scope path below is incorrect): + $env:INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" #> param ( @@ -176,7 +208,13 @@ param ( [string]$OutputFileName, [Parameter(Mandatory = $false)] - [string]$License = "licenses/license-GPLv2+CE.en-us.rtf" + [string]$License = "licenses/license-GPLv2+CE.en-us.rtf", + + [Parameter(Mandatory = $false)] + [string]$UpgradeCodeSeed = "", + + [Parameter(Mandatory = $false)] + [string]$SigningCommand = "", ) # Get the path to msix folder (parent directory of this script) @@ -231,6 +269,21 @@ UnzipFile -ZipFilePath $ZipFilePath -DestinationPath $srcFolder $exeTemplate = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" $content = Get-Content -Path $exeTemplate +if (-not $UpgradeCodeSeed) { + # If no UpgradeCodeSeed is given, generate a new PRODUCT_UPGRADE_CODE (random GUID, not upgradable) + $PRODUCT_UPGRADE_CODE = [guid]::NewGuid().ToString("B").ToUpper() + Write-Host "Unique PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" +} else { + # Generate a deterministic PRODUCT_UPGRADE_CODE based on input values and UpgradeCodeSeed + # Compose SOURCE_TEXT_GUID similar to the original script + $SOURCE_TEXT_GUID = "$ProductCategory-$ProductMajorVersion-$Arch-$JVM" + Write-Host "SOURCE_TEXT_GUID (without displaying secret UpgradeCodeSeed): $SOURCE_TEXT_GUID" + # Call getGuid.ps1 to generate a GUID based on SOURCE_TEXT_GUID and UpgradeCodeSeed + $getGuidScriptPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "getGuid.ps1" + $PRODUCT_UPGRADE_CODE = GenerateGuidFromString -SeedString "$SOURCE_TEXT_GUID-$UpgradeCodeSeed" + Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" +} + # Replace all instances of placeholders with the provided values $updatedContent = $content ` -replace "", $AppName ` @@ -241,7 +294,7 @@ $updatedContent = $content ` -replace "", $ProductMajorVersion ` -replace "", $ProductMinorVersion ` -replace "", $ProductMaintenanceVersion ` - # ProductPatchVersion + -replace "", $ProductPatchVersion ` -replace "", $ProductBuildNumber ` -replace "", $ExeProductVersion ` -replace "", $OutputFileName ` @@ -250,14 +303,31 @@ $updatedContent = $content ` -replace "", $VendorBrandingDialog ` -replace "", $VendorBrandingSmallIcon ` -replace "", $License ` - -replace "", "signtool.exe" ` - # Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped - -replace "", "{{}}" ######################## - + -replace "", $PRODUCT_UPGRADE_CODE # Write the updated content to the new create_exe.iss file $exeIssPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" Set-Content -Path $exeIssPath -Value $updatedContent Write-Host "create_exe.iss created at '$exeIssPath'" +# if $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation +if ([string]::IsNullOrEmpty($env:INNO_SETUP_PATH)) { + $env:INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" + Write-Host "INNO_SETUP_PATH not set. Defaulting to '$env:INNO_SETUP_PATH'" +} + +# Create .exe file based on create_exe.iss only if $SigningCommand is not empty or null +# See the following link for more info on issc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +if (![string]::IsNullOrEmpty($SigningCommand)) { + Write-Host "Executing Inno Setup with signing." + & "$env:INNO_SETUP_PATH" ` + /S $SigningCommand ` + $exeIssPath ` +} else { + Write-Host "Executing Inno Setup without signing." + & "$env:INNO_SETUP_PATH" $exeIssPath +} + +CheckForError -ErrorMessage "Error: iscc.exe failed to create .exe file." +Write-Host "EXE file created successfully in '$outputFolder'." \ No newline at end of file diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 8ff719555..8bff43f39 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -169,3 +169,13 @@ function Clear-TargetFolder { return $TargetFolder } +function GenerateGuidFromString { + param( + [string] $SeedString = "" + ) + $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider + $utf8 = new-object -TypeName System.Text.UTF8Encoding + $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($SeedString))) -replace "-", "" + $guid = [System.Guid]::Parse($hash) + Write-Output $guid.ToString('b').ToUpper() +} \ No newline at end of file diff --git a/inno_setup/templates/create_exe.iss b/inno_setup/templates/create_exe.iss index 7a1a3be58..4ccb751b8 100755 --- a/inno_setup/templates/create_exe.iss +++ b/inno_setup/templates/create_exe.iss @@ -22,11 +22,8 @@ #define VendorBrandingDialog "" #define VendorBrandingSmallIcon "" #define LicenseFile "" -#define SingingTool "" ; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -#define AppId "" -; TODO: Decide on AppID approach -; "{{767A46AB-EDEE-4F76-8987-842A6397F37A}" +#define AppId "{" + "" ; Define useful variables based off inputs #define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM @@ -48,7 +45,6 @@ ;; Inno settings ; $command="dotnet ${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:${env:WindowsCert}" ; $command='dotnet $${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:400' -SignTool={#SingingTool} Uninstallable=yes Compression=lzma SolidCompression=yes From d16fce56681fab53b745f4f362c7129f2d065ef6 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 14:35:44 -0700 Subject: [PATCH 05/49] Fixed powershell formatting and typos, cleaned up comments --- inno_setup/CreateExe.ps1 | 61 ++++++++++--------- inno_setup/ps_scripts/Helpers.ps1 | 33 ---------- ...create_exe.iss => create_exe.template.iss} | 11 ++-- 3 files changed, 36 insertions(+), 69 deletions(-) rename inno_setup/templates/{create_exe.iss => create_exe.template.iss} (94%) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index dcc9e4b44..e93657aa8 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -1,6 +1,6 @@ <# .SYNOPSIS - Script to handle a zip file by either copying it from a local location or downloading it from a URL. + Script that uses Inno Setup to create an EXE installer (for a JDK/JRE) from a zip file by either copying it from a local directory or downloading it from a URL. .DESCRIPTION This script automates the process of creating an EXE installer for OpenJDK distributions. It accepts either a local zip file path or a URL to a zip file (containing a zip file of the JDK binaries), extracts the contents, and prepares the necessary folder structure. This script is designed to be used with Inno Setup, a tool for creating Windows installers. First, a template Inno Setup script is modified with the provided parameters. The script then generates an EXE installer package that can be used to install OpenJDK on Windows systems. If a signing cli command is provided, the script will also sign the resulting EXE package (Note: this is the only way to also sign the uninstall script that goes into the EXE). The script supports various parameters to customize the installer, such as application name, vendor information, architecture, and versioning details. @@ -101,21 +101,21 @@ .EXAMPLE # Only mandatory inputs are defined here - .\CreateMsix.ps1 ` + .\CreateExe.ps1 ` -ZipFilePath "C:\path\to\file.zip" ` -ProductMajorVersion 17 ` -ProductMinorVersion 0 ` -ProductMaintenanceVersion 16 ` - -ProductPatchVersion 0 + -ProductPatchVersion 0 ` -ProductBuildNumber 8 ` -ExeProductVersion "17.0.16.8" ` -Arch "x64" ` -JVM "hotspot" ` - -ProductCategory "jdk" ` + -ProductCategory "jdk" .EXAMPLE # All inputs are defined here - .\CreateMsix.ps1 ` + .\CreateExe.ps1 ` # Mandatory inputs -ZipFileUrl "https://example.com/file.zip" ` -ProductMajorVersion 21 ` @@ -128,13 +128,13 @@ -JVM "hotspot" ` -ProductCategory "jdk" ` # Optional inputs: These are the defaults that will be used if not specified - -AppName "Eclipse Temurin JDK with Hotspot 21.0.8.9 (aarch64)" ` + -AppName "Eclipse Temurin JDK with Hotspot 21.0.8+9 (aarch64)" ` -Vendor "Eclipse Adoptium" ` -VendorBranding "Eclipse Temurin" ` -VendorBrandingLogo "logos\logo.ico" ` -VendorBrandingDialog "logos\welcome-dialog.bmp" ` -VendorBrandingSmallIcon "logos\logo_small.bmp" ` - -OutputFileName "OpenJDK21-jdk_aarch64_windows_hotspot- + -OutputFileName "OpenJDK21-jdk_aarch64_windows_hotspot-21.0.8.0.9" ` -License "licenses/license-GPLv2+CE.en-us.rtf" ` # Additional Optional Inputs: Omitting these inputs will cause their associated process to be skipped -SigningCommand "signtool.exe sign /f C:\path\to\cert" @@ -214,10 +214,10 @@ param ( [string]$UpgradeCodeSeed = "", [Parameter(Mandatory = $false)] - [string]$SigningCommand = "", + [string]$SigningCommand = "" ) -# Get the path to msix folder (parent directory of this script) +# Get the path to inno setup folder (parent directory of this script) $InnoSetupWorkDirPath = Split-Path -Parent $MyInvocation.MyCommand.Path # Find and source the Helpers.ps1 script located in the scripts folder to get access to helper functions @@ -232,22 +232,21 @@ ValidateZipFileInput -ZipFilePath $ZipFilePath -ZipFileUrl $ZipFileUrl # Set values needed in file $CapitalizedJVM = CapitalizeString ` - -InputValue $JVM ` - -AllLetters + -InputString $JVM ` -$VersionMajorToMaintenance = $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion +$VersionMajorToMaintenance = "${ProductMajorVersion}.${ProductMinorVersion}.${ProductMaintenanceVersion}" # Set default values if optional parameters are not provided $AppName = SetDefaultIfEmpty ` -InputValue $AppName ` - -DefaultValue "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $VersionMajorToMaintenance+$ProductBuildNumber ($Arch)" + -DefaultValue "$VendorBranding $($ProductCategory.ToUpper()) with ${CapitalizedJVM} ${VersionMajorToMaintenance}+${ProductBuildNumber} ($Arch)" ## Note: inno setup will add the '.exe' file extension automatically $OutputFileName = SetDefaultIfEmpty ` -InputValue $OutputFileName ` - -DefaultValue "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch_windows_$JVM-$VersionMajorToMaintenance.$ProductPatchVersion.$ProductBuildNumber" + -DefaultValue "OpenJDK${ProductMajorVersion}-${ProductCategory}_${Arch}_windows_${JVM}-${VersionMajorToMaintenance}.${ProductPatchVersion}.${ProductBuildNumber}" -# Clean the srce, workspace, and output folders +# Clean the src, workspace, and output folders $srcFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "src") $workspaceFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "workspace") $outputFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "output") @@ -260,13 +259,9 @@ if ($ZipFileUrl) { } Write-Host "Using ZipFilePath: $ZipFilePath" UnzipFile -ZipFilePath $ZipFilePath -DestinationPath $srcFolder +$unzippedFolder = (Get-ChildItem -Path $srcFolder -Directory | Select-Object -First 1).FullName -# Move contents of the unzipped file to $srcFolder -# $unzippedFolder = Join-Path -Path $workspaceFolder -ChildPath (Get-ChildItem -Path $workspaceFolder -Directory | Select-Object -First 1).Name -# Move-Item -Path (Join-Path -Path $unzippedFolder -ChildPath "*") -Destination $srcFolder -Force -# Remove-Item -Path $unzippedFolder -Recurse -Force - -$exeTemplate = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" +$exeTemplate = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "templates\create_exe.template.iss" $content = Get-Content -Path $exeTemplate if (-not $UpgradeCodeSeed) { @@ -276,11 +271,11 @@ if (-not $UpgradeCodeSeed) { } else { # Generate a deterministic PRODUCT_UPGRADE_CODE based on input values and UpgradeCodeSeed # Compose SOURCE_TEXT_GUID similar to the original script - $SOURCE_TEXT_GUID = "$ProductCategory-$ProductMajorVersion-$Arch-$JVM" + $SOURCE_TEXT_GUID = "${ProductCategory}-${ProductMajorVersion}-${Arch}-${JVM}" Write-Host "SOURCE_TEXT_GUID (without displaying secret UpgradeCodeSeed): $SOURCE_TEXT_GUID" # Call getGuid.ps1 to generate a GUID based on SOURCE_TEXT_GUID and UpgradeCodeSeed $getGuidScriptPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "getGuid.ps1" - $PRODUCT_UPGRADE_CODE = GenerateGuidFromString -SeedString "$SOURCE_TEXT_GUID-$UpgradeCodeSeed" + $PRODUCT_UPGRADE_CODE = GenerateGuidFromString -SeedString "${SOURCE_TEXT_GUID}-${UpgradeCodeSeed}" Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" } @@ -303,7 +298,8 @@ $updatedContent = $content ` -replace "", $VendorBrandingDialog ` -replace "", $VendorBrandingSmallIcon ` -replace "", $License ` - -replace "", $PRODUCT_UPGRADE_CODE + -replace "", $PRODUCT_UPGRADE_CODE ` + -replace "", $unzippedFolder # Write the updated content to the new create_exe.iss file $exeIssPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" @@ -312,22 +308,27 @@ Write-Host "create_exe.iss created at '$exeIssPath'" # if $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation if ([string]::IsNullOrEmpty($env:INNO_SETUP_PATH)) { - $env:INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" - Write-Host "INNO_SETUP_PATH not set. Defaulting to '$env:INNO_SETUP_PATH'" + $INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" + Write-Host "env:INNO_SETUP_PATH not set. Defaulting to '$INNO_SETUP_PATH'" +} else { + $INNO_SETUP_PATH = $env:INNO_SETUP_PATH } -# Create .exe file based on create_exe.iss only if $SigningCommand is not empty or null +# Create .exe file based on create_exe.iss. Sign it only if $SigningCommand is not empty or null # See the following link for more info on issc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline if (![string]::IsNullOrEmpty($SigningCommand)) { Write-Host "Executing Inno Setup with signing." - & "$env:INNO_SETUP_PATH" ` + & "$INNO_SETUP_PATH" ` /S $SigningCommand ` $exeIssPath ` } else { Write-Host "Executing Inno Setup without signing." - & "$env:INNO_SETUP_PATH" $exeIssPath + & "$INNO_SETUP_PATH" $exeIssPath } CheckForError -ErrorMessage "Error: iscc.exe failed to create .exe file." -Write-Host "EXE file created successfully in '$outputFolder'." \ No newline at end of file +Write-Host "EXE file created successfully in '$outputFolder'" + +Move-Item -Path $exeIssPath -Destination $workspaceFolder -Force +Write-Host "Moved create_exe.iss to '$workspaceFolder'" diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 8bff43f39..98b748c71 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -11,23 +11,6 @@ #> -# function ValidateMajorVersion { -# param( -# [Parameter(Mandatory=$true)] -# [int]$majorVersion -# ) - -# # Define valid major versions -# $validMajorVersions = @(11, 17, 21) - -# if ($validMajorVersions -contains $majorVersion) { -# Write-Host "The major version ($majorVersion) is valid." -# } else { -# Write-Host "The major version ($majorVersion) is NOT valid. Valid versions are: $($validVersions -join ', ')." -# exit 1 -# } -# } - function ValidateZipFileInput { param ( [string]$ZipFilePath, @@ -44,22 +27,6 @@ function ValidateZipFileInput { } } -# function ValidateSigningInput { -# param ( -# [string]$SigningCertPath, -# [string]$SigningPassword -# ) -# if ( -# ($SigningPassword -and -not $SigningCertPath) -or -# ($SigningCertPath -and -not $SigningPassword) -# ) { -# throw "Error: Both SigningCertPath and SigningPassword must be provided together." -# } -# else { -# Write-Host "Signing input validation passed." -# } -# } - function SetDefaultIfEmpty { param ( [string]$InputValue, diff --git a/inno_setup/templates/create_exe.iss b/inno_setup/templates/create_exe.template.iss similarity index 94% rename from inno_setup/templates/create_exe.iss rename to inno_setup/templates/create_exe.template.iss index 4ccb751b8..7c00f5acd 100755 --- a/inno_setup/templates/create_exe.iss +++ b/inno_setup/templates/create_exe.template.iss @@ -23,7 +23,7 @@ #define VendorBrandingSmallIcon "" #define LicenseFile "" ; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -#define AppId "{" + "" +#define AppId "{" ; Define useful variables based off inputs #define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM @@ -35,9 +35,9 @@ ; Include external files after definitions so those definitions can be used in the included files #include "tranlsations\default.iss" -#include "scripts\install_handler.iss" -#include "scripts\uninstall_handler.iss" -#include "scripts\boolean_checks.iss" +#include "inno_scripts\install_handler.iss" +#include "inno_scripts\uninstall_handler.iss" +#include "inno_scripts\boolean_checks.iss" [Setup] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=setupsection @@ -110,8 +110,7 @@ Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; Name: "{autoprograms}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}" [Files] -; Source: "jdk-17.0.15+6\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname -Source: "logos\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +Source: "\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname [InstallDelete] Type: filesandordirs; Name: "{app}" From 1249c697ea9ee77284c3bddc35e10bbfe33e863a Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 14:36:07 -0700 Subject: [PATCH 06/49] Added inno_setup/ folders to .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index d782c87a3..f8215b206 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,7 @@ Thumbs.db node_modules/ wix/Workdir/ + +inno_setup/output/ +inno_setup/src/ +inno_setup/workspace/ \ No newline at end of file From fd4891afee612cf39ca177709c9867633766b389 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 14:54:49 -0700 Subject: [PATCH 07/49] Updated default icons to be adoptium --- inno_setup/logos/logo.ico | Bin 163049 -> 182536 bytes inno_setup/logos/logo_small.bmp | Bin 9294 -> 196662 bytes inno_setup/logos/welcome-dialog.bmp | Bin 981958 -> 15150774 bytes 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 inno_setup/logos/welcome-dialog.bmp diff --git a/inno_setup/logos/logo.ico b/inno_setup/logos/logo.ico index 5906cf77a0d6deef0e23f619e37fa4b77ac0b911..0ef2318fe3c68357dafb33c2fb918ce80c142728 100644 GIT binary patch literal 182536 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 literal 163049 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 diff --git a/inno_setup/logos/logo_small.bmp b/inno_setup/logos/logo_small.bmp index e8c4cf414060346bc2f6fec952dafdc856621548..6996ddd8553848fcd18f33290346a9d9082d8a37 100644 GIT binary patch literal 196662 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 diff --git a/inno_setup/logos/welcome-dialog.bmp b/inno_setup/logos/welcome-dialog.bmp old mode 100755 new mode 100644 index 0f37863d42bdec27c98178594ef98968ad04eeb8..0f41a833e38fd6f0052d86031e8ccfa94b1b39b6 GIT binary patch literal 15150774 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
~{_3 literal 981958 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 From 7a5cf6c64ce422b8f977ed9b442e2a35a63f6fec Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 15:16:33 -0700 Subject: [PATCH 08/49] Now able to set root dir, fixed spelling + grammar --- inno_setup/CreateExe.ps1 | 37 ++++++++++--------- inno_setup/ps_scripts/Helpers.ps1 | 4 +- inno_setup/templates/create_exe.template.iss | 13 ++++--- .../default.iss | 0 4 files changed, 28 insertions(+), 26 deletions(-) rename inno_setup/{tranlsations => translations}/default.iss (100%) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index e93657aa8..caf3821d3 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -31,7 +31,7 @@ Example: if the version is 17.0.16+8, this is 8 .PARAMETER ExeProductVersion - The full version of the JDK/EXE product. This is used to determine + The full version of the JDK/EXE product as written with only '.' and numbers. Example: if the version is 17.0.16+8, this is "17.0.16.8" .PARAMETER Arch @@ -76,12 +76,12 @@ Default: "logos\logo_small.bmp" .PARAMETER OutputFileName - Optional. The name of the output file. Note: inno setup will automatically add the '.exe' file extension + Optional. The name of the output file. Note: Inno Setup will automatically add the '.exe' file extension Default: - "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch-windows-$JVM-$ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.ProductPatchVersion.$ProductBuildNumber" + "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch_windows_$JVM-$ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.$ProductPatchVersion.$ProductBuildNumber" .PARAMETER License - Optional. The Path to the license file. This can either be a full path to any file, or a relative path to a license file in the inno_setup/licenses folder. + Optional. The path to the license file. This can either be a full path to any file, or a relative path to a license file in the inno_setup/licenses folder. Default: "licenses/license-GPLv2+CE.en-us.rtf" .PARAMETER UpgradeCodeSeed @@ -141,12 +141,12 @@ .NOTES Ensure that you have downloaded Inno Setup (can be done through winget or directly from their website: https://jrsoftware.org/isdl.php). For more information, please see the #Dependencies section of the README.md file. - If you do not have inno setup installed, you can install it using the following command: + If you do not have Inno Setup installed, you can install it using the following command: winget install --id JRSoftware.InnoSetup -e -s winget --scope Or directly by modifying this link to the latest version: https://files.jrsoftware.org/is/6/innosetup-#.#.#.exe Example: https://files.jrsoftware.org/is/6/innosetup-6.5.0.exe - Afterwards, please set the following environment variable to the path of the inno setup executable (if the default, machine-scope path below is incorrect): + Afterwards, please set the following environment variable to the path of the Inno Setup executable (if the default, machine-scope path below is incorrect): $env:INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" #> @@ -217,11 +217,11 @@ param ( [string]$SigningCommand = "" ) -# Get the path to inno setup folder (parent directory of this script) -$InnoSetupWorkDirPath = Split-Path -Parent $MyInvocation.MyCommand.Path +# Get the path to Inno Setup folder (parent directory of this script) +$InnoSetupRootDir = Split-Path -Parent $MyInvocation.MyCommand.Path # Find and source the Helpers.ps1 script located in the scripts folder to get access to helper functions -$HelpersScriptPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "ps_scripts\Helpers.ps1" +$HelpersScriptPath = Join-Path -Path $InnoSetupRootDir -ChildPath "ps_scripts\Helpers.ps1" if (-not (Test-Path -Path $HelpersScriptPath)) { throw "Error: The Helpers.ps1 script was not found at '$HelpersScriptPath'." } @@ -241,15 +241,15 @@ $AppName = SetDefaultIfEmpty ` -InputValue $AppName ` -DefaultValue "$VendorBranding $($ProductCategory.ToUpper()) with ${CapitalizedJVM} ${VersionMajorToMaintenance}+${ProductBuildNumber} ($Arch)" -## Note: inno setup will add the '.exe' file extension automatically +## Note: Inno Setup will add the '.exe' file extension automatically $OutputFileName = SetDefaultIfEmpty ` -InputValue $OutputFileName ` -DefaultValue "OpenJDK${ProductMajorVersion}-${ProductCategory}_${Arch}_windows_${JVM}-${VersionMajorToMaintenance}.${ProductPatchVersion}.${ProductBuildNumber}" # Clean the src, workspace, and output folders -$srcFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "src") -$workspaceFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "workspace") -$outputFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupWorkDirPath -ChildPath "output") +$srcFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupRootDir -ChildPath "src") +$workspaceFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupRootDir -ChildPath "workspace") +$outputFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupRootDir -ChildPath "output") Write-Host "Folders cleaned: $srcFolder, $workspaceFolder, $outputFolder" # Download zip file if a URL is provided, otherwise use the local path @@ -261,7 +261,7 @@ Write-Host "Using ZipFilePath: $ZipFilePath" UnzipFile -ZipFilePath $ZipFilePath -DestinationPath $srcFolder $unzippedFolder = (Get-ChildItem -Path $srcFolder -Directory | Select-Object -First 1).FullName -$exeTemplate = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "templates\create_exe.template.iss" +$exeTemplate = Join-Path -Path $InnoSetupRootDir -ChildPath "templates\create_exe.template.iss" $content = Get-Content -Path $exeTemplate if (-not $UpgradeCodeSeed) { @@ -274,7 +274,7 @@ if (-not $UpgradeCodeSeed) { $SOURCE_TEXT_GUID = "${ProductCategory}-${ProductMajorVersion}-${Arch}-${JVM}" Write-Host "SOURCE_TEXT_GUID (without displaying secret UpgradeCodeSeed): $SOURCE_TEXT_GUID" # Call getGuid.ps1 to generate a GUID based on SOURCE_TEXT_GUID and UpgradeCodeSeed - $getGuidScriptPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "getGuid.ps1" + $getGuidScriptPath = Join-Path -Path $InnoSetupRootDir -ChildPath "getGuid.ps1" $PRODUCT_UPGRADE_CODE = GenerateGuidFromString -SeedString "${SOURCE_TEXT_GUID}-${UpgradeCodeSeed}" Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" } @@ -299,14 +299,15 @@ $updatedContent = $content ` -replace "", $VendorBrandingSmallIcon ` -replace "", $License ` -replace "", $PRODUCT_UPGRADE_CODE ` + -replace "", $InnoSetupRootDir ` -replace "", $unzippedFolder # Write the updated content to the new create_exe.iss file -$exeIssPath = Join-Path -Path $InnoSetupWorkDirPath -ChildPath "create_exe.iss" +$exeIssPath = Join-Path -Path $InnoSetupRootDir -ChildPath "create_exe.iss" Set-Content -Path $exeIssPath -Value $updatedContent Write-Host "create_exe.iss created at '$exeIssPath'" -# if $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation +# If $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation if ([string]::IsNullOrEmpty($env:INNO_SETUP_PATH)) { $INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" Write-Host "env:INNO_SETUP_PATH not set. Defaulting to '$INNO_SETUP_PATH'" @@ -315,7 +316,7 @@ if ([string]::IsNullOrEmpty($env:INNO_SETUP_PATH)) { } # Create .exe file based on create_exe.iss. Sign it only if $SigningCommand is not empty or null -# See the following link for more info on issc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +# See the following link for more info on iscc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline if (![string]::IsNullOrEmpty($SigningCommand)) { Write-Host "Executing Inno Setup with signing." & "$INNO_SETUP_PATH" ` diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 98b748c71..2641d08a9 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -48,12 +48,12 @@ function DownloadFileFromUrl { if (-not (Test-Path -Path $DestinationDirectory)) { New-Item -ItemType Directory -Path $DestinationDirectory | Out-Null } - $fileName = [System.IO.Path]::GetFileName($ZipFileUrl) + $fileName = [System.IO.Path]::GetFileName($Url) $downloadPath = Join-Path -Path $DestinationDirectory -ChildPath $fileName Write-Host "Downloading file from $Url to $DestinationDirectory" - # download zip file (needs to be silent or it will print the progress bar and take ~30 times as long to download) + # Download zip file (needs to be silent or it will print the progress bar and take ~30 times as long to download) $OriginalLocalProgressPreference = $ProgressPreference $ProgressPreference = 'SilentlyContinue' Invoke-WebRequest -Uri $Url -OutFile $downloadPath diff --git a/inno_setup/templates/create_exe.template.iss b/inno_setup/templates/create_exe.template.iss index 7c00f5acd..b9f29ebe8 100755 --- a/inno_setup/templates/create_exe.template.iss +++ b/inno_setup/templates/create_exe.template.iss @@ -28,13 +28,14 @@ ; Define useful variables based off inputs #define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM -; #define SourceDir "" +; Note: this SourceDir is the directory that all relative paths are based off of +#define SourceDir "" #define OutputDir "output" #define IniFile '{app}\install_tasks.ini' ; Include external files after definitions so those definitions can be used in the included files -#include "tranlsations\default.iss" +#include "translations\default.iss" #include "inno_scripts\install_handler.iss" #include "inno_scripts\uninstall_handler.iss" #include "inno_scripts\boolean_checks.iss" @@ -49,9 +50,9 @@ Uninstallable=yes Compression=lzma SolidCompression=yes WizardStyle=modern -; Ensure correct install dirs by setting the archs that are 64-bit +; Ensure correct install dirs by setting the architectures that are 64-bit ArchitecturesInstallIn64BitMode=x64compatible arm64 -; Notify windows explorer that the environment variables have changed +; Notify Windows Explorer that the environment variables have changed ChangesEnvironment=yes ; Debug ; SetupLogging=yes @@ -103,7 +104,7 @@ Name: "pathMod"; Description: "{cm:PathModDesc}"; ; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; -; HKLM keys can only be created/modified in Amin Install Mode +; HKLM keys can only be created/modified in Admin Install Mode Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; [Icons] @@ -165,7 +166,7 @@ Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); -; Two doublequotes (") are used in the ValueName to escape the quotes properly. Example value writen to key: "C:\Program Files\Adoptium\jdk-17.0.15.6-hotspot\bin\javaw.exe" -jar "%1" %* +; Two doublequotes (") are used in the ValueName to escape the quotes properly. Example value written to key: "C:\Program Files\Adoptium\jdk-17.0.15.6-hotspot\bin\javaw.exe" -jar "%1" %* Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open\command"; \ ValueType: string; ValueName: ""; ValueData: """{app}\bin\javaw.exe"" -jar ""%1"" %*"; \ Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); diff --git a/inno_setup/tranlsations/default.iss b/inno_setup/translations/default.iss similarity index 100% rename from inno_setup/tranlsations/default.iss rename to inno_setup/translations/default.iss From 1ddbb6d30ef319e1eba74844ef9e97b9f3e9067e Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 15:21:20 -0700 Subject: [PATCH 09/49] Fixed more comment typos, and one french typo --- inno_setup/translations/default.iss | 6 +++--- wix/Lang/OpenJDK.Base.fr-fr.wxl.template | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index e2dcf57ff..cd9d085dc 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -14,14 +14,14 @@ Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplifie [CustomMessages] ; Notes: -; 1) All translations in the intial PR were pulled directly from the wix MSI installer translation files (Jul 2025) +; 1) All translations in the initial PR were pulled directly from the wix MSI installer translation files (Jul 2025) ; 2) Any missing translations will default to English ; 3) When testing translations, the `Yes` and `No` buttons will always be in the language of the user's machine (regardless of the selected language in the installer) ; 4) All commented out translations were made by copilot and need to be verified before using/uncommenting ; 5) Translation entries allow us to have input arguments. They are specified as %1, %2, etc. ; For a list of default custom messages (Translated by Inno Setup), see: https://jrsoftware.org/ishelp/index.php?topic=custommessagessection -; Examlpe: we are using AssocFileExtension from this list +; Example: we are using AssocFileExtension from this list ; Custom task descriptions - English (default) PathModDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. @@ -50,7 +50,7 @@ Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) French.PathModDesc=Ajouter à la variable d'environnement PATH. French.JavaHomeModDesc=Définir la variable d'environnement JAVA_HOME. -French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Résintaller Oracle Java si besoin +French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin French.PathModTitle=Ajouter au PATH French.JavaHomeModTitle=Définir la variable JAVA_HOME French.FileAssocTitle=Associer les .jar diff --git a/wix/Lang/OpenJDK.Base.fr-fr.wxl.template b/wix/Lang/OpenJDK.Base.fr-fr.wxl.template index 44470b96a..f33fc17f7 100644 --- a/wix/Lang/OpenJDK.Base.fr-fr.wxl.template +++ b/wix/Lang/OpenJDK.Base.fr-fr.wxl.template @@ -17,7 +17,7 @@ - + From 2c2c61ed6dd6d7789a7471040cea2a3f99ea81c7 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 15:35:15 -0700 Subject: [PATCH 10/49] Removed old comments + sections, added new comment links to docs --- inno_setup/templates/create_exe.template.iss | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/inno_setup/templates/create_exe.template.iss b/inno_setup/templates/create_exe.template.iss index b9f29ebe8..59cc8ec26 100755 --- a/inno_setup/templates/create_exe.template.iss +++ b/inno_setup/templates/create_exe.template.iss @@ -44,8 +44,6 @@ ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=setupsection ;; Inno settings -; $command="dotnet ${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:${env:WindowsCert}" -; $command='dotnet $${env:MBSIGN_APPFOLDER}\DDSignFiles.dll -- /file:" + '$f' + " /certs:400' Uninstallable=yes Compression=lzma SolidCompression=yes @@ -100,6 +98,7 @@ PrivilegesRequiredOverridesAllowed=dialog UsePreviousPrivileges=no [Tasks] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=taskssection Name: "pathMod"; Description: "{cm:PathModDesc}"; GroupDescription: "{cm:PathModTitle}"; ; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; @@ -107,22 +106,24 @@ Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; ; HKLM keys can only be created/modified in Admin Install Mode Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; -[Icons] -Name: "{autoprograms}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}" - [Files] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=filessection Source: "\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname [InstallDelete] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=installdeletesection Type: filesandordirs; Name: "{app}" Type: files; Name: "{app}\install_tasks.ini" [UninstallDelete] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=uninstalldeletesection ; This section is needed since uninstall misses the install_tasks.ini file Type: files; Name: "{app}\install_tasks.ini" -; All registry key info translated from current wix/msi installer scripts [Registry] +; For more info, see https://jrsoftware.org/ishelp/index.php?topic=registrysection +; All registry key info translated from current wix/msi installer scripts + ; HKLM = HKEY_LOCAL_MACHINE ; HKA: ; On per machine install = HKLM = HKEY_LOCAL_MACHINE From d9e910378126c3a4108a404c3b8e8635fe01c8fc Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 13 Aug 2025 17:38:54 -0700 Subject: [PATCH 11/49] Now using input params for .iss, removed templates folder --- inno_setup/CreateExe.ps1 | 81 ++++++++----------- .../{templates => }/create_exe.template.iss | 26 +----- inno_setup/ps_scripts/Helpers.ps1 | 2 +- 3 files changed, 38 insertions(+), 71 deletions(-) rename inno_setup/{templates => }/create_exe.template.iss (89%) mode change 100755 => 100644 diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index caf3821d3..c19b3cd37 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -246,6 +246,11 @@ $OutputFileName = SetDefaultIfEmpty ` -InputValue $OutputFileName ` -DefaultValue "OpenJDK${ProductMajorVersion}-${ProductCategory}_${Arch}_windows_${JVM}-${VersionMajorToMaintenance}.${ProductPatchVersion}.${ProductBuildNumber}" +## If $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation +$INNO_SETUP_PATH = SetDefaultIfEmpty ` + -InputValue $env:INNO_SETUP_PATH ` + -DefaultValue "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" + # Clean the src, workspace, and output folders $srcFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupRootDir -ChildPath "src") $workspaceFolder = Clear-TargetFolder -TargetFolder (Join-Path -Path $InnoSetupRootDir -ChildPath "workspace") @@ -261,9 +266,6 @@ Write-Host "Using ZipFilePath: $ZipFilePath" UnzipFile -ZipFilePath $ZipFilePath -DestinationPath $srcFolder $unzippedFolder = (Get-ChildItem -Path $srcFolder -Directory | Select-Object -First 1).FullName -$exeTemplate = Join-Path -Path $InnoSetupRootDir -ChildPath "templates\create_exe.template.iss" -$content = Get-Content -Path $exeTemplate - if (-not $UpgradeCodeSeed) { # If no UpgradeCodeSeed is given, generate a new PRODUCT_UPGRADE_CODE (random GUID, not upgradable) $PRODUCT_UPGRADE_CODE = [guid]::NewGuid().ToString("B").ToUpper() @@ -279,57 +281,42 @@ if (-not $UpgradeCodeSeed) { Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" } -# Replace all instances of placeholders with the provided values -$updatedContent = $content ` - -replace "", $AppName ` - -replace "", $Vendor ` - -replace "", $VendorBranding ` - -replace "", $ProductCategory ` - -replace "", $JVM ` - -replace "", $ProductMajorVersion ` - -replace "", $ProductMinorVersion ` - -replace "", $ProductMaintenanceVersion ` - -replace "", $ProductPatchVersion ` - -replace "", $ProductBuildNumber ` - -replace "", $ExeProductVersion ` - -replace "", $OutputFileName ` - -replace "", "https://adoptium.net/" ` - -replace "", $VendorBrandingLogo ` - -replace "", $VendorBrandingDialog ` - -replace "", $VendorBrandingSmallIcon ` - -replace "", $License ` - -replace "", $PRODUCT_UPGRADE_CODE ` - -replace "", $InnoSetupRootDir ` - -replace "", $unzippedFolder - -# Write the updated content to the new create_exe.iss file -$exeIssPath = Join-Path -Path $InnoSetupRootDir -ChildPath "create_exe.iss" -Set-Content -Path $exeIssPath -Value $updatedContent -Write-Host "create_exe.iss created at '$exeIssPath'" - -# If $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation -if ([string]::IsNullOrEmpty($env:INNO_SETUP_PATH)) { - $INNO_SETUP_PATH = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" - Write-Host "env:INNO_SETUP_PATH not set. Defaulting to '$INNO_SETUP_PATH'" -} else { - $INNO_SETUP_PATH = $env:INNO_SETUP_PATH -} +# $exeIssPath = Join-Path -Path $InnoSetupRootDir -ChildPath "create_exe.template.iss" # Create .exe file based on create_exe.iss. Sign it only if $SigningCommand is not empty or null # See the following link for more info on iscc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline if (![string]::IsNullOrEmpty($SigningCommand)) { Write-Host "Executing Inno Setup with signing." - & "$INNO_SETUP_PATH" ` - /S $SigningCommand ` - $exeIssPath ` + $ExtraArgs = "/SsignCli=$SigningCommand" + # $ExtraArgs = "/SsignCli=$SigningCommand" + ' /DSignToolName="signCli"' } else { Write-Host "Executing Inno Setup without signing." - & "$INNO_SETUP_PATH" $exeIssPath + $ExtraArgs = '/SsignCli=$f' } - -CheckForError -ErrorMessage "Error: iscc.exe failed to create .exe file." +# /DAppURL ################################# +# /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped +& "$INNO_SETUP_PATH" $ExtraArgs ` + /DAppName="$AppName" ` + /DVendor="$Vendor" ` + /DVendorBranding="$VendorBranding" ` + /DProductCategory="$ProductCategory" ` + /DJVM="$JVM" ` + /DProductMajorVersion="$ProductMajorVersion" ` + /DProductMinorVersion="$ProductMinorVersion" ` + /DProductMaintenanceVersion="$ProductMaintenanceVersion" ` + /DProductPatchVersion="$ProductPatchVersion" ` + /DProductBuildNumber="$ProductBuildNumber" ` + /DExeProductVersion="$ExeProductVersion" ` + /DAppURL="$AppURL" ` + /DOutputExeName="$OutputFileName" ` + /DVendorBrandingLogo="$VendorBrandingLogo" ` + /DVendorBrandingDialog="$VendorBrandingDialog" ` + /DVendorBrandingSmallIcon="$VendorBrandingSmallIcon" ` + /DLicenseFile="$License" ` + /DAppId="{${PRODUCT_UPGRADE_CODE}" ` + /DSourceFiles="$unzippedFolder" ` + "${InnoSetupRootDir}\create_exe.template.iss" + +CheckForError -ErrorMessage "ISCC.exe failed to create .exe file." Write-Host "EXE file created successfully in '$outputFolder'" - -Move-Item -Path $exeIssPath -Destination $workspaceFolder -Force -Write-Host "Moved create_exe.iss to '$workspaceFolder'" diff --git a/inno_setup/templates/create_exe.template.iss b/inno_setup/create_exe.template.iss old mode 100755 new mode 100644 similarity index 89% rename from inno_setup/templates/create_exe.template.iss rename to inno_setup/create_exe.template.iss index 59cc8ec26..669991747 --- a/inno_setup/templates/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -5,31 +5,9 @@ ; Modify this file to customize the installer behavior and options. ;------------------------------------------------------------------------------ -#define AppName "" -#define Vendor "" -#define VendorBranding "" -#define ProductCategory "" -#define JVM "" -#define ProductMajorVersion "" -#define ProductMinorVersion "" -#define ProductMaintenanceVersion "" -#define ProductPatchVersion "" -#define ProductBuildNumber "" -#define ExeProductVersion "" -#define OutputExeName "" -#define AppURL "" -#define VendorBrandingLogo "" -#define VendorBrandingDialog "" -#define VendorBrandingSmallIcon "" -#define LicenseFile "" -; Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -#define AppId "{" - ; Define useful variables based off inputs #define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM -; Note: this SourceDir is the directory that all relative paths are based off of -#define SourceDir "" #define OutputDir "output" #define IniFile '{app}\install_tasks.ini' @@ -44,6 +22,7 @@ ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=setupsection ;; Inno settings +SignTool=signCli Uninstallable=yes Compression=lzma SolidCompression=yes @@ -108,7 +87,8 @@ Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; [Files] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=filessection -Source: "\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +; Source: "\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname +Source: "{#SourceFiles}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname [InstallDelete] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=installdeletesection diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 2641d08a9..072c7af19 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -87,7 +87,7 @@ function CheckForError { [string]$ErrorMessage ) if ($LASTEXITCODE -ne 0) { - throw "Error: $ErrorMessage" + throw "Last exit code: $LASTEXITCODE. Error: $ErrorMessage" } } From da0ba3698edf5fda69c07c7c29012c324574d348 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 14 Aug 2025 11:38:40 -0700 Subject: [PATCH 12/49] Now able to set different URLs for each URL case --- inno_setup/CreateExe.ps1 | 16 +++++++++++++--- inno_setup/create_exe.template.iss | 8 ++++---- inno_setup/ps_scripts/Helpers.ps1 | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index c19b3cd37..741780435 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -204,6 +204,15 @@ param ( [Parameter(Mandatory = $false)] [string]$VendorBrandingSmallIcon = "logos\logo_small.bmp", + [Parameter(Mandatory = $false)] + [string]$ProductPublisherLink = "https://adoptium.net", + + [Parameter(Mandatory = $false)] + [string]$ProductSupportLink = "https://adoptium.net/support", + + [Parameter(Mandatory = $false)] + [string]$ProductUpdateInfoLink = "https://adoptium.net/temurin/releases", + [Parameter(Mandatory = $false)] [string]$OutputFileName, @@ -298,7 +307,6 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { & "$INNO_SETUP_PATH" $ExtraArgs ` /DAppName="$AppName" ` /DVendor="$Vendor" ` - /DVendorBranding="$VendorBranding" ` /DProductCategory="$ProductCategory" ` /DJVM="$JVM" ` /DProductMajorVersion="$ProductMajorVersion" ` @@ -307,8 +315,10 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { /DProductPatchVersion="$ProductPatchVersion" ` /DProductBuildNumber="$ProductBuildNumber" ` /DExeProductVersion="$ExeProductVersion" ` - /DAppURL="$AppURL" ` - /DOutputExeName="$OutputFileName" ` + /DAppPublisherURL="$ProductPublisherLink" ` + /DAppSupportURL="$ProductSupportLink" ` + /DAppUpdatesURL="$ProductUpdateInfoLink" ` + /DOutputFileName="$OutputFileName" ` /DVendorBrandingLogo="$VendorBrandingLogo" ` /DVendorBrandingDialog="$VendorBrandingDialog" ` /DVendorBrandingSmallIcon="$VendorBrandingSmallIcon" ` diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 669991747..7a60b3787 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -39,13 +39,13 @@ AppId={#AppId} AppName={#AppName} AppVersion={#ExeProductVersion} AppPublisher={#Vendor} -AppPublisherURL={#AppURL} -AppSupportURL={#AppURL} -AppUpdatesURL={#AppURL} +AppPublisherURL={#AppPublisherURL} +AppSupportURL={#AppSupportURL} +AppUpdatesURL={#AppUpdatesURL} ;; Dirs and logos OutputDir={#OutputDir} -OutputBaseFilename={#OutputExeName} +OutputBaseFilename={#OutputFileName} ; SourceDir={#SourceDir} ; Setting default installDir based on the install mode DefaultDirName={code:GetDefaultDir} diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 072c7af19..8f71197c7 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -140,6 +140,7 @@ function GenerateGuidFromString { param( [string] $SeedString = "" ) + # This is the same function used for the WIX upgrade code generation $md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $utf8 = new-object -TypeName System.Text.UTF8Encoding $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($SeedString))) -replace "-", "" From ad551bf0d5629df87e47d596a6c90ffe339e701e Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 14 Aug 2025 11:50:32 -0700 Subject: [PATCH 13/49] Updated product displayName to hide redundancy --- inno_setup/CreateExe.ps1 | 6 ++++-- inno_setup/create_exe.template.iss | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 741780435..3538388b7 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -302,8 +302,10 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { Write-Host "Executing Inno Setup without signing." $ExtraArgs = '/SsignCli=$f' } -# /DAppURL ################################# + # /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped +$AppId = "{" + "${PRODUCT_UPGRADE_CODE}" + & "$INNO_SETUP_PATH" $ExtraArgs ` /DAppName="$AppName" ` /DVendor="$Vendor" ` @@ -323,7 +325,7 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { /DVendorBrandingDialog="$VendorBrandingDialog" ` /DVendorBrandingSmallIcon="$VendorBrandingSmallIcon" ` /DLicenseFile="$License" ` - /DAppId="{${PRODUCT_UPGRADE_CODE}" ` + /DAppId="$AppId" ` /DSourceFiles="$unzippedFolder" ` "${InnoSetupRootDir}\create_exe.template.iss" diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 7a60b3787..336b31347 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -37,6 +37,7 @@ ChangesEnvironment=yes ;; App info AppId={#AppId} AppName={#AppName} +AppVerName={#AppName} AppVersion={#ExeProductVersion} AppPublisher={#Vendor} AppPublisherURL={#AppPublisherURL} From 5a9466686dbe964c0f253784409c536885e17a13 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 14 Aug 2025 12:22:20 -0700 Subject: [PATCH 14/49] Added translation file customization --- inno_setup/CreateExe.ps1 | 24 ++++++++++++++++++++++++ inno_setup/create_exe.template.iss | 5 +---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 3538388b7..ba4173fa5 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -75,6 +75,15 @@ This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. Default: "logos\logo_small.bmp" +.PARAMETER ProductPublisherLink + Optional. The URL that represents the product publisher. Default: "https://adoptium.net" + +.PARAMETER ProductSupportLink + Optional. The URL for where customers can go to for support. Default: "https://adoptium.net/support" + +.PARAMETER ProductUpdateInfoLink + Optional. The URL for product update information. Default: "https://adoptium.net/temurin/releases" + .PARAMETER OutputFileName Optional. The name of the output file. Note: Inno Setup will automatically add the '.exe' file extension Default: @@ -90,6 +99,11 @@ If this is not provided, a random PRODUCT_UPGRADE_CODE will be generated. Default: "" +.PARAMETER TranslationFile + Optional. The path to the translation file .iss containing text translations for the installer's custom messages. + This can be a path relative to the `installer/inno_setup` directory, or this can be an absolute path. + Default: "translations\default.iss" + .PARAMETER SigningCommand Optional. The command to sign the resulting EXE file. This is typically a command that uses signtool.exe to sign the EXE file. If this is not provided, the EXE will not be signed. @@ -134,8 +148,13 @@ -VendorBrandingLogo "logos\logo.ico" ` -VendorBrandingDialog "logos\welcome-dialog.bmp" ` -VendorBrandingSmallIcon "logos\logo_small.bmp" ` + -ProductPublisherLink "https://adoptium.net" ` + -ProductSupportLink "https://adoptium.net/support" ` + -ProductUpdateInfoLink "https://adoptium.net/temurin/releases" ` -OutputFileName "OpenJDK21-jdk_aarch64_windows_hotspot-21.0.8.0.9" ` -License "licenses/license-GPLv2+CE.en-us.rtf" ` + -UpgradeCodeSeed "MySecretSeedCode(SameAsWix)" ` + -TranslationFile "translations/default.iss" ` # Additional Optional Inputs: Omitting these inputs will cause their associated process to be skipped -SigningCommand "signtool.exe sign /f C:\path\to\cert" @@ -222,6 +241,9 @@ param ( [Parameter(Mandatory = $false)] [string]$UpgradeCodeSeed = "", + [Parameter(Mandatory = $false)] + [string]$TranslationFile = "translations\default.iss", + [Parameter(Mandatory = $false)] [string]$SigningCommand = "" ) @@ -306,7 +328,9 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { # /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped $AppId = "{" + "${PRODUCT_UPGRADE_CODE}" +# For info on CLI options: https://jrsoftware.org/ishelp/index.php?topic=isppcc & "$INNO_SETUP_PATH" $ExtraArgs ` + /J$TranslationFile ` /DAppName="$AppName" ` /DVendor="$Vendor" ` /DProductCategory="$ProductCategory" ` diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 336b31347..b81b1330f 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -11,9 +11,7 @@ #define OutputDir "output" #define IniFile '{app}\install_tasks.ini' - -; Include external files after definitions so those definitions can be used in the included files -#include "translations\default.iss" +; Include code helper scripts #include "inno_scripts\install_handler.iss" #include "inno_scripts\uninstall_handler.iss" #include "inno_scripts\boolean_checks.iss" @@ -88,7 +86,6 @@ Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; [Files] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=filessection -; Source: "\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname Source: "{#SourceFiles}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname [InstallDelete] From 6feb3aa6e6929e5811331965f639780a21546088 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 14 Aug 2025 15:48:56 -0700 Subject: [PATCH 15/49] Enabled toggle for unofficial translations, fixed uninstall icon --- inno_setup/CreateExe.ps1 | 19 +++++++++++++++++-- inno_setup/create_exe.template.iss | 4 ++-- inno_setup/inno_scripts/install_handler.iss | 3 ++- inno_setup/translations/default.iss | 11 ++++++++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index ba4173fa5..35ac615a5 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -104,6 +104,12 @@ This can be a path relative to the `installer/inno_setup` directory, or this can be an absolute path. Default: "translations\default.iss" +.PARAMETER IncludeUnofficialTranslations + Optional. Set this flag to support unofficial Inno Setup translations like Chinese. + ## Note: Here, unofficial means that there are a few default messages that do not + ## have translations (from English) supported by Inno Setup yet. + Default: "false" + .PARAMETER SigningCommand Optional. The command to sign the resulting EXE file. This is typically a command that uses signtool.exe to sign the EXE file. If this is not provided, the EXE will not be signed. @@ -244,6 +250,9 @@ param ( [Parameter(Mandatory = $false)] [string]$TranslationFile = "translations\default.iss", + [Parameter(Mandatory = $false)] + [string]$IncludeUnofficialTranslations = "false", + [Parameter(Mandatory = $false)] [string]$SigningCommand = "" ) @@ -312,8 +321,6 @@ if (-not $UpgradeCodeSeed) { Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" } -# $exeIssPath = Join-Path -Path $InnoSetupRootDir -ChildPath "create_exe.template.iss" - # Create .exe file based on create_exe.iss. Sign it only if $SigningCommand is not empty or null # See the following link for more info on iscc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline if (![string]::IsNullOrEmpty($SigningCommand)) { @@ -325,6 +332,14 @@ if (![string]::IsNullOrEmpty($SigningCommand)) { $ExtraArgs = '/SsignCli=$f' } +# Set this flag to support unofficial inno_setup translations like Chinese +## Note: Here, unofficial means that there are a few default messages that do not +## have translations (from English) supported by Inno Setup yet +if ($IncludeUnofficialTranslations -ne "false") { + Write-Host "Including unofficial translations." + $ExtraArgs += ' /DINCLUDE_UNOFFICIAL_TRANSLATIONS="true"' +} + # /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped $AppId = "{" + "${PRODUCT_UPGRADE_CODE}" diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index b81b1330f..ea1fea40b 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -6,10 +6,9 @@ ;------------------------------------------------------------------------------ ; Define useful variables based off inputs -#define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM - #define OutputDir "output" #define IniFile '{app}\install_tasks.ini' +#define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM ; Include code helper scripts #include "inno_scripts\install_handler.iss" @@ -53,6 +52,7 @@ UsePreviousAppDir=no UninstallFilesDir={app}\uninstall LicenseFile={#LicenseFile} SetupIconFile={#VendorBrandingLogo} +UninstallDisplayIcon={app}\uninstall\unins000.exe ; Add these lines to change the banner images WizardImageFile={#VendorBrandingDialog} WizardSmallImageFile={#VendorBrandingSmallIcon} diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index bd0e5b5a0..c4dea737b 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -17,8 +17,9 @@ begin // Add metadata to the INI file only if TaskName is 'METADATA' if TaskName = 'METADATA' then begin + SetIniString('Metadata', 'Publisher', ExpandConstant('{#Vendor}'), TaskStateFile); SetIniString('Metadata', 'InstallDate', GetDateTimeString('yyyy/mm/dd hh:nn:ss', #0, #0), TaskStateFile); - SetIniString('Metadata', 'Version', '{#ExeProductVersion}', TaskStateFile); + SetIniString('Metadata', 'Version', ExpandConstant('{#ExeProductVersion}'), TaskStateFile); end // Create the INI file with task selections else if WizardIsTaskSelected(TaskName) then diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index cd9d085dc..f69488f3c 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -8,10 +8,15 @@ Name: "German"; MessagesFile: "compiler:Languages\German.isl" Name: "Spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "French"; MessagesFile: "compiler:Languages\French.isl" Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl" + +#ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS + ; Note: ChineseTW and ChineseCN still need translations for certain progress-bar screen messages Name: "ChineseTW"; MessagesFile: "compiler:Languages\Unofficial\ChineseTraditional.isl" Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplified.isl" +#endif + [CustomMessages] ; Notes: ; 1) All translations in the initial PR were pulled directly from the wix MSI installer translation files (Jul 2025) @@ -64,6 +69,8 @@ French.RegKeysTitle=Clés de registre JavaSoft (Oracle) ; Japanese.FileAssocTitle=.jarを関連付け ; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー +#ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS + ChineseCN.PathModDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. ChineseCN.JavaHomeModDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. ; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 @@ -78,4 +85,6 @@ ChineseTW.JavaHomeModDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME ChineseTW.PathModTitle=修改 PATH 變數值 ChineseTW.JavaHomeModTitle=設定或重寫 JAVA_HOME 變量 ; ChineseTW.FileAssocTitle=關聯 .jar -; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 \ No newline at end of file +; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 + +#endif \ No newline at end of file From dffe3365963a231c77d2895a0f465f32ea652e33 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 14 Aug 2025 17:23:28 -0700 Subject: [PATCH 16/49] Ensured that tool both when signing and not signing. Fixed 'Installed Apps' icon --- inno_setup/CreateExe.ps1 | 23 +++++++++++++---------- inno_setup/create_exe.template.iss | 6 ++++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 35ac615a5..c6ea5fa84 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -320,16 +320,20 @@ if (-not $UpgradeCodeSeed) { $PRODUCT_UPGRADE_CODE = GenerateGuidFromString -SeedString "${SOURCE_TEXT_GUID}-${UpgradeCodeSeed}" Write-Host "Constant PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" } +# /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped +$AppId = "{" + "${PRODUCT_UPGRADE_CODE}" -# Create .exe file based on create_exe.iss. Sign it only if $SigningCommand is not empty or null -# See the following link for more info on iscc.exe: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +# Sign only if $SigningCommand is not empty or null +# See the following link for more info on Inno Setup signing: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool +# See here for info on /S flag format: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline if (![string]::IsNullOrEmpty($SigningCommand)) { Write-Host "Executing Inno Setup with signing." - $ExtraArgs = "/SsignCli=$SigningCommand" - # $ExtraArgs = "/SsignCli=$SigningCommand" + ' /DSignToolName="signCli"' + $SigningArg = "/SsigningCommand=$SigningCommand" + $ExtraArgs = '/DsignFiles="true"' # set this flag to enable signing with above command } else { Write-Host "Executing Inno Setup without signing." - $ExtraArgs = '/SsignCli=$f' + $SigningArg = "" + $ExtraArgs = "" } # Set this flag to support unofficial inno_setup translations like Chinese @@ -340,11 +344,10 @@ if ($IncludeUnofficialTranslations -ne "false") { $ExtraArgs += ' /DINCLUDE_UNOFFICIAL_TRANSLATIONS="true"' } -# /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped -$AppId = "{" + "${PRODUCT_UPGRADE_CODE}" - # For info on CLI options: https://jrsoftware.org/ishelp/index.php?topic=isppcc -& "$INNO_SETUP_PATH" $ExtraArgs ` +# and https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +# Create .exe file based on create_exe.template.iss. +& "$INNO_SETUP_PATH" $SigningArg ` /J$TranslationFile ` /DAppName="$AppName" ` /DVendor="$Vendor" ` @@ -366,7 +369,7 @@ $AppId = "{" + "${PRODUCT_UPGRADE_CODE}" /DLicenseFile="$License" ` /DAppId="$AppId" ` /DSourceFiles="$unzippedFolder" ` - "${InnoSetupRootDir}\create_exe.template.iss" + $ExtraArgs "${InnoSetupRootDir}\create_exe.template.iss" CheckForError -ErrorMessage "ISCC.exe failed to create .exe file." diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index ea1fea40b..e19e9176d 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -19,7 +19,9 @@ ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=setupsection ;; Inno settings -SignTool=signCli +#ifdef signFiles +SignTool=signingCommand +#endif Uninstallable=yes Compression=lzma SolidCompression=yes @@ -52,7 +54,7 @@ UsePreviousAppDir=no UninstallFilesDir={app}\uninstall LicenseFile={#LicenseFile} SetupIconFile={#VendorBrandingLogo} -UninstallDisplayIcon={app}\uninstall\unins000.exe +UninstallDisplayIcon={uninstallexe} ; Add these lines to change the banner images WizardImageFile={#VendorBrandingDialog} WizardSmallImageFile={#VendorBrandingSmallIcon} From 71a28eb625e64ed8555375234ec74186d20dfeb4 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 15 Aug 2025 11:29:20 -0700 Subject: [PATCH 17/49] Updated comments and uninstallDir --- inno_setup/CreateExe.ps1 | 2 +- inno_setup/create_exe.template.iss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index c6ea5fa84..4bdea5173 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -168,7 +168,7 @@ Ensure that you have downloaded Inno Setup (can be done through winget or directly from their website: https://jrsoftware.org/isdl.php). For more information, please see the #Dependencies section of the README.md file. If you do not have Inno Setup installed, you can install it using the following command: winget install --id JRSoftware.InnoSetup -e -s winget --scope - Or directly by modifying this link to the latest version: + Or directly download the installation exe by modifying this link to the latest version: https://files.jrsoftware.org/is/6/innosetup-#.#.#.exe Example: https://files.jrsoftware.org/is/6/innosetup-6.5.0.exe Afterwards, please set the following environment variable to the path of the Inno Setup executable (if the default, machine-scope path below is incorrect): diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index e19e9176d..7d804d3fd 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -51,7 +51,7 @@ OutputBaseFilename={#OutputFileName} DefaultDirName={code:GetDefaultDir} ; Enable the user to select the installation directory every time UsePreviousAppDir=no -UninstallFilesDir={app}\uninstall +; UninstallFilesDir={app}\uninstall LicenseFile={#LicenseFile} SetupIconFile={#VendorBrandingLogo} UninstallDisplayIcon={uninstallexe} From ed9927ef5fc40b93c4e3405bdb43b43261385c78 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Tue, 9 Sep 2025 15:19:46 -0700 Subject: [PATCH 18/49] Updated header comments --- inno_setup/CreateExe.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 4bdea5173..23f6e1f95 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -162,6 +162,7 @@ -UpgradeCodeSeed "MySecretSeedCode(SameAsWix)" ` -TranslationFile "translations/default.iss" ` # Additional Optional Inputs: Omitting these inputs will cause their associated process to be skipped + -IncludeUnofficialTranslations "true" ` -SigningCommand "signtool.exe sign /f C:\path\to\cert" .NOTES From 26625ce2bc332e0dddb0e490f1271c5f91209cfc Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Mon, 6 Oct 2025 16:42:08 -0700 Subject: [PATCH 19/49] Now limiting installation criteria by architecture --- inno_setup/CreateExe.ps1 | 4 ++++ inno_setup/create_exe.template.iss | 5 ++++- inno_setup/ps_scripts/Helpers.ps1 | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 23f6e1f95..a8048757c 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -261,6 +261,9 @@ param ( # Get the path to Inno Setup folder (parent directory of this script) $InnoSetupRootDir = Split-Path -Parent $MyInvocation.MyCommand.Path +# Validate Architecture input and get ArchitecturesAllowed value for template input +$ArchitecturesAllowed = GetArchitectureAllowedTemplateInput -Arch $Arch + # Find and source the Helpers.ps1 script located in the scripts folder to get access to helper functions $HelpersScriptPath = Join-Path -Path $InnoSetupRootDir -ChildPath "ps_scripts\Helpers.ps1" if (-not (Test-Path -Path $HelpersScriptPath)) { @@ -350,6 +353,7 @@ if ($IncludeUnofficialTranslations -ne "false") { # Create .exe file based on create_exe.template.iss. & "$INNO_SETUP_PATH" $SigningArg ` /J$TranslationFile ` + /DArchitecturesAllowed="$ArchitecturesAllowed" ` /DAppName="$AppName" ` /DVendor="$Vendor" ` /DProductCategory="$ProductCategory" ` diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 7d804d3fd..8905e1c6a 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -26,8 +26,11 @@ Uninstallable=yes Compression=lzma SolidCompression=yes WizardStyle=modern +; Specify the architectures that the installer supports (e.g., x86compatible, x64os, x64compatible,arm64, etc.) +; See this link to learn more: https://jrsoftware.org/ishelp/index.php?topic=archidentifiers +ArchitecturesAllowed={#ArchitecturesAllowed} ; Ensure correct install dirs by setting the architectures that are 64-bit -ArchitecturesInstallIn64BitMode=x64compatible arm64 +ArchitecturesInstallIn64BitMode=win64 ; Notify Windows Explorer that the environment variables have changed ChangesEnvironment=yes ; Debug diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 8f71197c7..0e07e2a65 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -27,6 +27,21 @@ function ValidateZipFileInput { } } +function GetArchitectureAllowedTemplateInput { + param ( + [string]$Arch + ) + if ($Arch -eq "x86" -or $Arch -like "*32*" -or $Arch -eq "all") { + return "x86compatible" + } elseif ($Arch -eq "x64") { + return "x64os" + } elseif ($Arch -like "arm*" -or $Arch -eq "aarch64") { + return "arm64" + } else { + throw "Error: Unsupported architecture '$Arch'. Supported architectures are: x86, x86_32, x64, arm, arm64, aarch64, or all." + } +} + function SetDefaultIfEmpty { param ( [string]$InputValue, From 2be58ddd6b64c8ae086de5750ead2a49050ec3da Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Mon, 6 Oct 2025 17:12:27 -0700 Subject: [PATCH 20/49] Fixed code order, now only choosing spoken lang if exe can't find default --- inno_setup/CreateExe.ps1 | 6 +++--- inno_setup/create_exe.template.iss | 4 ++-- inno_setup/inno_scripts/get_constants.iss | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index a8048757c..c678fa445 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -261,9 +261,6 @@ param ( # Get the path to Inno Setup folder (parent directory of this script) $InnoSetupRootDir = Split-Path -Parent $MyInvocation.MyCommand.Path -# Validate Architecture input and get ArchitecturesAllowed value for template input -$ArchitecturesAllowed = GetArchitectureAllowedTemplateInput -Arch $Arch - # Find and source the Helpers.ps1 script located in the scripts folder to get access to helper functions $HelpersScriptPath = Join-Path -Path $InnoSetupRootDir -ChildPath "ps_scripts\Helpers.ps1" if (-not (Test-Path -Path $HelpersScriptPath)) { @@ -274,6 +271,9 @@ if (-not (Test-Path -Path $HelpersScriptPath)) { ## Ensure that either a local zip file path or a URL is provided, but not both ValidateZipFileInput -ZipFilePath $ZipFilePath -ZipFileUrl $ZipFileUrl +# Validate Architecture input and get ArchitecturesAllowed value for template input +$ArchitecturesAllowed = GetArchitectureAllowedTemplateInput -Arch $Arch + # Set values needed in file $CapitalizedJVM = CapitalizeString ` -InputString $JVM ` diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 8905e1c6a..ce224f2c9 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -70,8 +70,8 @@ DirExistsWarning=auto DisableProgramGroupPage=yes DisableWelcomePage=no UsedUserAreasWarning=no -; Enable the user to select the installation language -ShowLanguageDialog=yes +; Enable the user to select the installation language if one is not detected +ShowLanguageDialog=auto ;; Privileges settings ; Add these lines to enable installation scope selection diff --git a/inno_setup/inno_scripts/get_constants.iss b/inno_setup/inno_scripts/get_constants.iss index 8eca8fa05..51e60531a 100755 --- a/inno_setup/inno_scripts/get_constants.iss +++ b/inno_setup/inno_scripts/get_constants.iss @@ -26,7 +26,7 @@ function GetDefaultDir(Param: string): string; begin if IsAdminInstallMode then // Here {commonpf}='C:\Program Files' for x64, aarch64, and x86 Archs since - // 'ArchitecturesInstallIn64BitMode=x64compatible arm64' was set in [Setup] + // 'ArchitecturesInstallIn64BitMode=win64' was set in [Setup] Result := ExpandConstant('{commonpf}\{#Vendor}\{#ProductFolder}') else // {userpf}='C:\Users\\AppData\Local\Programs' From 8d5cd49d13d192f09ae9917e56fe1f20cea8a5c6 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 14:20:24 -0700 Subject: [PATCH 21/49] Now doing verysilent uninstallation during version upgrade --- inno_setup/create_exe.template.iss | 8 ++++---- inno_setup/inno_scripts/install_handler.iss | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index ce224f2c9..b9cdc94ad 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -49,7 +49,6 @@ AppUpdatesURL={#AppUpdatesURL} ;; Dirs and logos OutputDir={#OutputDir} OutputBaseFilename={#OutputFileName} -; SourceDir={#SourceDir} ; Setting default installDir based on the install mode DefaultDirName={code:GetDefaultDir} ; Enable the user to select the installation directory every time @@ -82,7 +81,7 @@ UsePreviousPrivileges=no [Tasks] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=taskssection -Name: "pathMod"; Description: "{cm:PathModDesc}"; GroupDescription: "{cm:PathModTitle}"; +Name: "pathMod"; Description: "{cm:PathModDesc}"; GroupDescription: "{cm:PathModTitle}"; ; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; @@ -108,7 +107,8 @@ Type: files; Name: "{app}\install_tasks.ini" ; All registry key info translated from current wix/msi installer scripts ; HKLM = HKEY_LOCAL_MACHINE -; HKA: +; HKCU = HKEY_CURRENT_USER +; HKA changes based on install mode: ; On per machine install = HKLM = HKEY_LOCAL_MACHINE ; On per user install = HKCU = HKEY_CURRENT_USER @@ -138,7 +138,7 @@ Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{ Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('pathMod'); ; jarfileMod: Add .jar file association keys if the user requests them -; Note: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids is +; Note: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids is ; automatically created by Windows when running jar file for the first time Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ ValueType: string; ValueName: ""; ValueData: "{#Vendor}.jarfile"; \ diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index c4dea737b..4fe9a6c6f 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -92,7 +92,7 @@ begin Log('Uninstall string (quotes removed): ' + RemoveQuotes(UninstallString)); // Run the uninstaller silently (the Uninstall string has quotes that we need to remove) - if Exec(RemoveQuotes(UninstallString), '/SILENT /NORESTART', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + if Exec(RemoveQuotes(UninstallString), '/VERYSILENT /NORESTART', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then begin Log('Previous ' + RootName + ' installation uninstalled successfully. Result code: ' + IntToStr(ResultCode)); end From d6f67adac745d160fd9c9c16c0e3f9beb731d92e Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 14:21:43 -0700 Subject: [PATCH 22/49] Fixed formatting and removed old comments --- inno_setup/inno_scripts/install_handler.iss | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 4fe9a6c6f..1a38cac6f 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -13,7 +13,7 @@ var begin // Store each task selection state in an INI file during installation TaskStateFile := ExpandConstant('{#IniFile}'); - + // Add metadata to the INI file only if TaskName is 'METADATA' if TaskName = 'METADATA' then begin @@ -36,7 +36,7 @@ begin // Read current PATH if not RegQueryStringValue(RegRoot, EnvRegKey, 'PATH', UserPath) then UserPath := ''; - + // Check if our path entry is already in PATH (returns 0 if not found) if Pos(AppBinPath, UserPath) = 0 then begin @@ -81,7 +81,7 @@ begin begin CurrentRoot := RegistryRoots[i]; RootName := RootNames[i]; - + if RegQueryStringValue(CurrentRoot, UninstallKey, 'UninstallString', UninstallString) then begin if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayName', DisplayName) then @@ -90,7 +90,7 @@ begin end; Log('Uninstall string (with quotes): ' + UninstallString); Log('Uninstall string (quotes removed): ' + RemoveQuotes(UninstallString)); - + // Run the uninstaller silently (the Uninstall string has quotes that we need to remove) if Exec(RemoveQuotes(UninstallString), '/VERYSILENT /NORESTART', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then begin @@ -115,7 +115,6 @@ end; // For more info, see the CurStepChanged section in https://jrsoftware.org/ishelp/index.php?topic=scriptevents procedure CurStepChanged(CurStep: TSetupStep); begin - // Store task selections just before the actual installation starts if CurStep = ssInstall then begin // Uninstall previous version if it exists @@ -129,7 +128,7 @@ begin StoreTaskSelections('javaHomeMod'); StoreTaskSelections('javasoftMod'); StoreTaskSelections('METADATA'); - + // Add {app}\bin to PATH only if the user requested it if WasTaskSelected('pathMod') then AddToPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); From d711260529065271293205298a511261018c52e8 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 14:22:55 -0700 Subject: [PATCH 23/49] Now checking if version is same or newer at startup --- inno_setup/inno_scripts/install_handler.iss | 125 ++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 1a38cac6f..75b7f3e40 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -52,6 +52,54 @@ begin end; end; +// Compare two version strings in X.X.X.X format +// Returns: -1 if Version1 < Version2, 0 if equal, 1 if Version1 > Version2 +function CompareVersions(Version1: string, Version2: string): Integer; +var + V1Parts, V2Parts: TStringList; + i, Part1, Part2: Integer; +begin + Result := 0; + V1Parts := TStringList.Create; + V2Parts := TStringList.Create; + try + // Split versions by '.' + V1Parts.Delimiter := '.'; + V1Parts.DelimitedText := Version1; + V2Parts.Delimiter := '.'; + V2Parts.DelimitedText := Version2; + + // Compare each part + for i := 0 to Max(V1Parts.Count - 1, V2Parts.Count - 1) do + begin + // Get the part as integer (default to 0 if not present) + if i < V1Parts.Count then + Part1 := StrToIntDef(V1Parts[i], 0) + else + Part1 := 0; + + if i < V2Parts.Count then + Part2 := StrToIntDef(V2Parts[i], 0) + else + Part2 := 0; + + if Part1 < Part2 then + begin + Result := -1; + Exit; + end + else if Part1 > Part2 then + begin + Result := 1; + Exit; + end; + end; + finally + V1Parts.Free; + V2Parts.Free; + end; +end; + // Uninstall the previous version of the same openJDK package if it exists // Logs if /LOG is passed into compile cli, or if SetupLogging=yes in [Setup] section // Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default @@ -135,4 +183,81 @@ begin end; end; +// Initialize setup and check for existing versions +function InitializeSetup(): Boolean; +var + UninstallKey: string; + DisplayVersion: string; + DisplayName: string; + RegistryRoots: array[0..1] of Integer; + RootNames: array[0..1] of string; + i: Integer; + CurrentRoot: Integer; + RootName: string; + VersionComparison: Integer; + NewerVersionInstalledString: string; + VersionAlreadyInstalledString: string; +begin + Result := True; + + // Initialize arrays for registry roots and their names + RegistryRoots[0] := HKLM; + RegistryRoots[1] := HKCU; + RootNames[0] := 'system'; + RootNames[1] := 'user'; + + // All EXE info is stored here, regardless of vendor + UninstallKey := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); + + // Loop through both HKLM and HKCU + for i := 0 to 1 do + begin + CurrentRoot := RegistryRoots[i]; + RootName := RootNames[i]; + + // Check if a previous version was installed and compare + if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayVersion', DisplayVersion) then + begin + RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayName', DisplayName); + Log('Previous version to uninstall: ' + DisplayVersion); + Log('Previous version display name: ' + DisplayName); + + // Compare versions and exit if existing version is higher + VersionComparison := CompareVersions(DisplayVersion, ExpandConstant('{#ExeProductVersion}')); + if VersionComparison > 0 then + begin + // This message (translated into all languages supported by Inno Setup), reads: + // The existing file is newer than the one Setup is trying to install "{APP_NAME}" < "{APP_NAME}" + // Example: + // The existing file is newer than the one Setup is trying to install "Eclipse Temurin JDK with Hotspot 25.0.0+36 (x64)" < "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)". + NewerVersionInstalledString := SetupMessage(msgExistingFileNewer2) + ' "' + ExpandConstant('{#AppName}') + '" < "' + DisplayName + '"'; + // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox + MsgBox(NewerVersionInstalledString, mbError, MB_OK); + Log('Newer version detected. Exiting installation.'); + Result := False; + Exit; + end + else if VersionComparison = 0 then + begin + // This message (translated into all languages supported by Inno Setup), reads: + // The file already exists. Overwrite the existing file "{APP_NAME}"? + // Example: + // The file already exists. Overwrite the existing file "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)"? + VersionAlreadyInstalledString := SetupMessage(msgFileExists2) + ' ' + SetupMessage(msgFileExistsOverwriteExisting) + ' "' + ExpandConstant('{#AppName}') + '"?'; + // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox + if MsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO) = IDYES then + begin + Log('Same version detected: "' + DisplayVersion + '". Proceeding with reinstallation.'); + end + else + begin + Log('User chose not to reinstall same version.'); + Result := False; + Exit; + end; + end; + end; + end; +end; + #endif \ No newline at end of file From 7952f81b262b4e36f32346d15645ea4c396f7d34 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 15:30:11 -0700 Subject: [PATCH 24/49] Updated version comparison and removed & from starting text --- inno_setup/inno_scripts/install_handler.iss | 31 +++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 75b7f3e40..981b5a6d5 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -52,12 +52,25 @@ begin end; end; +// Remove ampersand characters from a string (used to remove mnemonics from messages) +function RemoveAmpersand(InputString: string): string; +var + i: Integer; +begin + Result := ''; + for i := 1 to Length(InputString) do + begin + if InputString[i] <> '&' then + Result := Result + InputString[i]; + end; +end; + // Compare two version strings in X.X.X.X format // Returns: -1 if Version1 < Version2, 0 if equal, 1 if Version1 > Version2 -function CompareVersions(Version1: string, Version2: string): Integer; +function CompareVersions(Version1: string; Version2: string): Integer; var V1Parts, V2Parts: TStringList; - i, Part1, Part2: Integer; + i, MaxLen, Part1, Part2: Integer; begin Result := 0; V1Parts := TStringList.Create; @@ -69,8 +82,14 @@ begin V2Parts.Delimiter := '.'; V2Parts.DelimitedText := Version2; + // We do not have a Max() function available to us, so we do it manually + if V1Parts.Count > V2Parts.Count then + MaxLen := V1Parts.Count + else + MaxLen := V2Parts.Count; + // Compare each part - for i := 0 to Max(V1Parts.Count - 1, V2Parts.Count - 1) do + for i := 0 to MaxLen do begin // Get the part as integer (default to 0 if not present) if i < V1Parts.Count then @@ -183,7 +202,9 @@ begin end; end; -// Initialize setup and check for existing versions +// As the EXE installer initializes, compare the version being installed with any existing version +// If an existing version is newer, abort installation with an error message +// For more info, see https://jrsoftware.org/ishelp/index.php?topic=scriptevents function InitializeSetup(): Boolean; var UninstallKey: string; @@ -243,7 +264,7 @@ begin // The file already exists. Overwrite the existing file "{APP_NAME}"? // Example: // The file already exists. Overwrite the existing file "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)"? - VersionAlreadyInstalledString := SetupMessage(msgFileExists2) + ' ' + SetupMessage(msgFileExistsOverwriteExisting) + ' "' + ExpandConstant('{#AppName}') + '"?'; + VersionAlreadyInstalledString := SetupMessage(msgFileExists2) + ' ' + RemoveAmpersand(SetupMessage(msgFileExistsOverwriteExisting)) + ' "' + ExpandConstant('{#AppName}') + '"?'; // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox if MsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO) = IDYES then begin From cc8d2377e74da1d3219f9defd806e614f81cb0fc Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 15:34:08 -0700 Subject: [PATCH 25/49] Moved functions to new helpers file --- inno_setup/inno_scripts/helpers.iss | 73 +++++++++++++++++++++ inno_setup/inno_scripts/install_handler.iss | 70 +------------------- 2 files changed, 76 insertions(+), 67 deletions(-) create mode 100644 inno_setup/inno_scripts/helpers.iss diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss new file mode 100644 index 000000000..5c61afd8a --- /dev/null +++ b/inno_setup/inno_scripts/helpers.iss @@ -0,0 +1,73 @@ +#ifndef HELPERS_INCLUDED +#define HELPERS_INCLUDED + +[Code] + +// Remove ampersand characters from a string (used to remove mnemonics from messages) +function RemoveAmpersand(InputString: string): string; +var + i: Integer; +begin + Result := ''; + for i := 1 to Length(InputString) do + begin + if InputString[i] <> '&' then + Result := Result + InputString[i]; + end; +end; + +// Compare two version strings in X.X.X.X format +// Returns: -1 if Version1 < Version2, 0 if equal, 1 if Version1 > Version2 +function CompareVersions(Version1: string; Version2: string): Integer; +var + V1Parts, V2Parts: TStringList; + i, MaxLen, Part1, Part2: Integer; +begin + Result := 0; + V1Parts := TStringList.Create; + V2Parts := TStringList.Create; + try + // Split versions by '.' + V1Parts.Delimiter := '.'; + V1Parts.DelimitedText := Version1; + V2Parts.Delimiter := '.'; + V2Parts.DelimitedText := Version2; + + // We do not have a Max() function available to us, so we do it manually + if V1Parts.Count > V2Parts.Count then + MaxLen := V1Parts.Count + else + MaxLen := V2Parts.Count; + + // Compare each part + for i := 0 to MaxLen do + begin + // Get the part as integer (default to 0 if not present) + if i < V1Parts.Count then + Part1 := StrToIntDef(V1Parts[i], 0) + else + Part1 := 0; + + if i < V2Parts.Count then + Part2 := StrToIntDef(V2Parts[i], 0) + else + Part2 := 0; + + if Part1 < Part2 then + begin + Result := -1; + Exit; + end + else if Part1 > Part2 then + begin + Result := 1; + Exit; + end; + end; + finally + V1Parts.Free; + V2Parts.Free; + end; +end; + +#endif \ No newline at end of file diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 981b5a6d5..e13f72e2c 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -1,6 +1,7 @@ #ifndef INSTALL_HANDLER_INCLUDED #define INSTALL_HANDLER_INCLUDED +#include "helpers.iss" #include "get_constants.iss" #include "boolean_checks.iss" @@ -52,73 +53,6 @@ begin end; end; -// Remove ampersand characters from a string (used to remove mnemonics from messages) -function RemoveAmpersand(InputString: string): string; -var - i: Integer; -begin - Result := ''; - for i := 1 to Length(InputString) do - begin - if InputString[i] <> '&' then - Result := Result + InputString[i]; - end; -end; - -// Compare two version strings in X.X.X.X format -// Returns: -1 if Version1 < Version2, 0 if equal, 1 if Version1 > Version2 -function CompareVersions(Version1: string; Version2: string): Integer; -var - V1Parts, V2Parts: TStringList; - i, MaxLen, Part1, Part2: Integer; -begin - Result := 0; - V1Parts := TStringList.Create; - V2Parts := TStringList.Create; - try - // Split versions by '.' - V1Parts.Delimiter := '.'; - V1Parts.DelimitedText := Version1; - V2Parts.Delimiter := '.'; - V2Parts.DelimitedText := Version2; - - // We do not have a Max() function available to us, so we do it manually - if V1Parts.Count > V2Parts.Count then - MaxLen := V1Parts.Count - else - MaxLen := V2Parts.Count; - - // Compare each part - for i := 0 to MaxLen do - begin - // Get the part as integer (default to 0 if not present) - if i < V1Parts.Count then - Part1 := StrToIntDef(V1Parts[i], 0) - else - Part1 := 0; - - if i < V2Parts.Count then - Part2 := StrToIntDef(V2Parts[i], 0) - else - Part2 := 0; - - if Part1 < Part2 then - begin - Result := -1; - Exit; - end - else if Part1 > Part2 then - begin - Result := 1; - Exit; - end; - end; - finally - V1Parts.Free; - V2Parts.Free; - end; -end; - // Uninstall the previous version of the same openJDK package if it exists // Logs if /LOG is passed into compile cli, or if SetupLogging=yes in [Setup] section // Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default @@ -244,6 +178,7 @@ begin Log('Previous version display name: ' + DisplayName); // Compare versions and exit if existing version is higher + // Note: see helpers.iss for CompareVersions() function VersionComparison := CompareVersions(DisplayVersion, ExpandConstant('{#ExeProductVersion}')); if VersionComparison > 0 then begin @@ -264,6 +199,7 @@ begin // The file already exists. Overwrite the existing file "{APP_NAME}"? // Example: // The file already exists. Overwrite the existing file "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)"? + // Note: see helpers.iss for RemoveAmpersand() function VersionAlreadyInstalledString := SetupMessage(msgFileExists2) + ' ' + RemoveAmpersand(SetupMessage(msgFileExistsOverwriteExisting)) + ' "' + ExpandConstant('{#AppName}') + '"?'; // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox if MsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO) = IDYES then From 0127b3565aa0f6fae991c23d52cfe5b0888a1492 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 23 Oct 2025 18:18:55 -0700 Subject: [PATCH 26/49] Using new png support, fixed version check dialogs, now allowing all x64compatible machines to install x64 binaries --- inno_setup/CreateExe.ps1 | 18 +++++++++--------- inno_setup/create_exe.template.iss | 2 +- inno_setup/inno_scripts/install_handler.iss | 16 ++++++++-------- inno_setup/logos/logo-small.png | Bin 0 -> 49845 bytes inno_setup/logos/logo_small.bmp | Bin 196662 -> 0 bytes inno_setup/logos/welcome-dialog.bmp | Bin 15150774 -> 0 bytes inno_setup/logos/welcome-dialog.png | Bin 0 -> 75254 bytes inno_setup/ps_scripts/Helpers.ps1 | 18 +++++++++++------- 8 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 inno_setup/logos/logo-small.png delete mode 100644 inno_setup/logos/logo_small.bmp delete mode 100644 inno_setup/logos/welcome-dialog.bmp create mode 100644 inno_setup/logos/welcome-dialog.png diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index c678fa445..54385e684 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -49,7 +49,7 @@ .PARAMETER AppName Optional. The name of the App. - Example: "Eclipse Temurin JDK with Hotspot 17.0.15+6 (x64)" + Example: "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)" Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion+$ProductBuildNumber ($Arch)" .PARAMETER Vendor @@ -66,14 +66,14 @@ Default: "logos\logo.ico" .PARAMETER VendorBrandingDialog - Optional. The path to the ".bmp" file to be used as the welcome dialog in the installer. + Optional. The path to the ".png" file to be used as the welcome dialog in the installer. This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. - Default: "logos\welcome-dialog.bmp" + Default: "logos\welcome-dialog.png" .PARAMETER VendorBrandingSmallIcon - Optional. The path to the ".bmp" file to be used as the small icon in the installer. + Optional. The path to the ".png" file to be used as the small icon in the installer. This can be a full path to any file, or a relative path to a logo file in the inno_setup/logos folder. - Default: "logos\logo_small.bmp" + Default: "logos\logo-small.png" .PARAMETER ProductPublisherLink Optional. The URL that represents the product publisher. Default: "https://adoptium.net" @@ -152,8 +152,8 @@ -Vendor "Eclipse Adoptium" ` -VendorBranding "Eclipse Temurin" ` -VendorBrandingLogo "logos\logo.ico" ` - -VendorBrandingDialog "logos\welcome-dialog.bmp" ` - -VendorBrandingSmallIcon "logos\logo_small.bmp" ` + -VendorBrandingDialog "logos\welcome-dialog.png" ` + -VendorBrandingSmallIcon "logos\logo-small.png" ` -ProductPublisherLink "https://adoptium.net" ` -ProductSupportLink "https://adoptium.net/support" ` -ProductUpdateInfoLink "https://adoptium.net/temurin/releases" ` @@ -225,10 +225,10 @@ param ( [string]$VendorBrandingLogo = "logos\logo.ico", [Parameter(Mandatory = $false)] - [string]$VendorBrandingDialog = "logos\welcome-dialog.bmp", + [string]$VendorBrandingDialog = "logos\welcome-dialog.png", [Parameter(Mandatory = $false)] - [string]$VendorBrandingSmallIcon = "logos\logo_small.bmp", + [string]$VendorBrandingSmallIcon = "logos\logo-small.png", [Parameter(Mandatory = $false)] [string]$ProductPublisherLink = "https://adoptium.net", diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index b9cdc94ad..9a508219b 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -94,13 +94,13 @@ Source: "{#SourceFiles}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdir [InstallDelete] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=installdeletesection -Type: filesandordirs; Name: "{app}" Type: files; Name: "{app}\install_tasks.ini" [UninstallDelete] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=uninstalldeletesection ; This section is needed since uninstall misses the install_tasks.ini file Type: files; Name: "{app}\install_tasks.ini" +Type: dirifempty; Name: "{app}" [Registry] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=registrysection diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index e13f72e2c..7681bce6e 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -183,10 +183,10 @@ begin if VersionComparison > 0 then begin // This message (translated into all languages supported by Inno Setup), reads: - // The existing file is newer than the one Setup is trying to install "{APP_NAME}" < "{APP_NAME}" + // The existing file is newer than the one Setup is trying to install. version {Installer_ExeProductVersion} < version {Existing_ExeProductVersion} // Example: - // The existing file is newer than the one Setup is trying to install "Eclipse Temurin JDK with Hotspot 25.0.0+36 (x64)" < "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)". - NewerVersionInstalledString := SetupMessage(msgExistingFileNewer2) + ' "' + ExpandConstant('{#AppName}') + '" < "' + DisplayName + '"'; + // The existing file is newer than the one Setup is trying to install. version 25.0.0.36 < version 25.0.1.8 + NewerVersionInstalledString := SetupMessage(msgExistingFileNewer2) + ' ' + FmtMessage(CustomMessage('NameAndVersion'), ['', ExpandConstant('{#ExeProductVersion}')]) + ' <' + FmtMessage(CustomMessage('NameAndVersion'), ['', DisplayVersion]); // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox MsgBox(NewerVersionInstalledString, mbError, MB_OK); Log('Newer version detected. Exiting installation.'); @@ -196,13 +196,13 @@ begin else if VersionComparison = 0 then begin // This message (translated into all languages supported by Inno Setup), reads: - // The file already exists. Overwrite the existing file "{APP_NAME}"? + // {APP_NAME} -- The file already exists. Overwrite the existing file? // Example: - // The file already exists. Overwrite the existing file "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)"? + // Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64) -- The file already exists. Overwrite the existing file? // Note: see helpers.iss for RemoveAmpersand() function - VersionAlreadyInstalledString := SetupMessage(msgFileExists2) + ' ' + RemoveAmpersand(SetupMessage(msgFileExistsOverwriteExisting)) + ' "' + ExpandConstant('{#AppName}') + '"?'; - // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox - if MsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO) = IDYES then + VersionAlreadyInstalledString := ExpandConstant('{#AppName}') + ' -- ' + SetupMessage(msgFileExists2) + ' ' + RemoveAmpersand(SetupMessage(msgFileExistsOverwriteExisting)) + '?'; + // For info on SuppressibleMsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_suppressiblemsgbox + if SuppressibleMsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO, IDYES) = IDYES then begin Log('Same version detected: "' + DisplayVersion + '". Proceeding with reinstallation.'); end diff --git a/inno_setup/logos/logo-small.png b/inno_setup/logos/logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2530a68a3079df28cc678f77ae661793c4b240 GIT binary patch literal 49845 zcmb@tWmH^Uwl0ioAwdfd5+G>d?iwVxg#cAJ!QEYg6C4tp00~YY5Zv8@y96gVB)Hs7 z-nY9?pWEjfS zlLU=+;2*rRx|}3j`3U(gaDikYp)3IhR~3hO3quC3(H-RVoZ;Z;b{_xWgG`XgfiJwZ z($sa)RaO!-vA1P|nc5qhv3b}!0C&T|35$6+z)Y;oT%H=6Sy~t^W&gedxDuhUba8PIWM_AGcV~0wVzYO$VCN7J5MYOJvU75>0(Y=F zd)m3cJXr0VY5#tJw3)Msla+&umA&25#|OfU?Ok0&Xk1;bOa;wh<~+uxraY|1FfLP8 z4h~ZoE6kLOgVmIa%ao6YgP+r!!8|B`R#{I?kZgRnn-!p^}4d0g`2Ye5w! zD>Gmfk0M1mg#Ud0Z|@1SKQ83IEKKyTcK}_1SO2ukqnZ9`T{Antr0#(2Sd!8(;o#cp zUPw!5dKm6EyJu`nCZ9hnGHd-57U5EYA~?!RnFj<0ro+N{dw5YkSVEu~2fycAl?_`P zmksPaRbd;x!_*Kv_XP_sf6a=NqFfyK$w^D05 z*@)ic+?vpgAMcRSNCnWsHpW=&5IhfVhS8lf|Fe;zVS(0 zTX+5m%{v|zo*xp^3GbN3+GT_9BMSOeIe*l5*5gcwm`zNr{))g}Siq!S`iHuV0%lZF zVPw))L|1J?YG>XXz1YV~ULsdS%;+R~Ifb($9qaHppT^a^xZu{OX&&$A_Fqgumgifn ze~f&+R5!B;px0h(l~V@29`oyW!at`*uo19W0}rnCrlXis?<;S{HU#o;hm8xz&uU*d z>1whL{?V}~ui|@{+~2}`0tzo|X-ycFW0QznTVJK{ym2}Qw`B*mt%vm+)w*Gc)RDI` zO^tIWM&Dd~N=Fi%JjtyeD$hVSui!)yLhBF=B9Ubvu*X2vJCj~&BPErx%96J!@fKhy zPT7>VDwel0;V{m1{SU&X`~1qf6L8lAAm;?t-HC;5WvHOL)!|o>=6DVdlsx!tp8V_+ zV=02+Tp4soLfMYi{@5lsmqz;o@>W@&$aJMl7>DsAY+c#k%1nJBf38gU+?It`)$%zj zi~4&ebyCFl%XKl)x!eNkuV`Gn@c(SZ#K$khrXZDSHILo#S�A+6rQ5%sgnYJIG! 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 Od2nAy#;&2 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
~{_3 diff --git a/inno_setup/logos/welcome-dialog.png b/inno_setup/logos/welcome-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0dca1ff34c097e1234874c2c44f01b735fac09 GIT binary patch literal 75254 zcmeFZXIN8N7d9Nn8F55qtc-$SLz;jnh}2k61f)0VA{``jLJ7o%4FTy2LKFzSC`b(< zHb8m@DGAaIEmA`WA>Td+otfwT{=WZSye=bVVJ87PPwQ>g}a?)Z5$9 zM$XR4PWq;ejkMTJt1~uYl9D!7VpcY1B*kpboUxISmOOXbPV(l_pO5!)wEOq@D9@i} z00xnOUXhR#KLu?W`dm)S!_gM(0(zv9qyqf<|9nqD0@}!bHm0=x9dK6g**}(n%=C|S zZBf9aXkfdO(a$*%h_&6S$`|x~Ev9-T_kBbls@_{l9p+$s`EW`8O$_%R{h@E4S@+4p z4nhR+_BD-L(09UL{peN-pt*;yzk)d+y#C3DtDE3YwqAh(2Z1<$3Iq-G?{36z@W;QN z?u9?zzL5%lMErgX3Kj(7@ZTFtY}f*^5f=!=MviRY1wh0N>_i|o>Ied{QBya_0f2)I za)#G1{>sHgB(CrVM96CP!2#CY>=bqK3~k@xw*uk1Kyd^dM4g3j#Z> zHb3Xo|0pCDyO|^ubE~WVx7_w3&KzB3-8X-3lkr!xkTTq@Gk348H{zu2+egZeqh&E?gCVT9g2lwu~^NVF1 z;8=%$UA(;i^Csr)XFsoI{`K>&=5H5&Ufw+a>o(`spLa7i9r<}#b7PUM8#dX9liM4) zvwS0kFUZ6l_4j z1{7>S!3Gon3v58a1{D0i1O<1zh4E)d(Ml1`;P0cvl8XZ%EcqWYiZy)0Eg&eVD~ zS3Do1tU6MgfmQ0KedUCpDP6t2`3LhBY!fAtW5X(sFLckqBYF5g^x-czs*dJ113d!dXy z{pWrJ;*}9J=xZr#4drPY$;)mByJ~~}FQ>i5;P*k#Q7mRt7oexyvy?xa1DZb+>*YbTBInad%KKC5aDjuO7A9N> zgmX0XvU7jOf=xNf-@dmz@F+6*lMKJ#39{$-W~w?`={Y|zYW8#ZZ7s`VZ@tJ1P4Db! zMUFOJfkD@T8D)E@&7>bO(Bpj7!2Y`s&?&l}%{E$73uQ2J8q-M);om>St<8N{;72WU zUI4EeO2Y5C?IK^Cnn_jNWP84n@#PE^+5dx^`j(|Nt^)2#)c*;_qHmsry7H;Z1Pu

brx%^gE7XmP^`$nZ(TZvV%t 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 literal 0 HcmV?d00001 diff --git a/inno_setup/ps_scripts/Helpers.ps1 b/inno_setup/ps_scripts/Helpers.ps1 index 0e07e2a65..44d9513a8 100644 --- a/inno_setup/ps_scripts/Helpers.ps1 +++ b/inno_setup/ps_scripts/Helpers.ps1 @@ -33,11 +33,14 @@ function GetArchitectureAllowedTemplateInput { ) if ($Arch -eq "x86" -or $Arch -like "*32*" -or $Arch -eq "all") { return "x86compatible" - } elseif ($Arch -eq "x64") { - return "x64os" - } elseif ($Arch -like "arm*" -or $Arch -eq "aarch64") { + } + elseif ($Arch -eq "x64") { + return "x64compatible" + } + elseif ($Arch -like "arm*" -or $Arch -eq "aarch64") { return "arm64" - } else { + } + else { throw "Error: Unsupported architecture '$Arch'. Supported architectures are: x86, x86_32, x64, arm, arm64, aarch64, or all." } } @@ -108,9 +111,9 @@ function CheckForError { function CapitalizeString { param ( - [Parameter(Mandatory=$true)] + [Parameter(Mandatory = $true)] [string]$InputString, - [Parameter(Mandatory=$false)] + [Parameter(Mandatory = $false)] [switch]$AllLetters ) @@ -121,7 +124,8 @@ function CapitalizeString { if ($AllLetters) { # Capitalize all letters (uppercase) return $InputString.ToUpper() - } else { + } + else { # Capitalize only the first letter return $InputString.Substring(0, 1).ToUpper() + $InputString.Substring(1).ToLower() } From 50a8f503fa6a0869aee0ea42df06085752281890 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 24 Oct 2025 13:14:59 -0700 Subject: [PATCH 27/49] Updated formatting --- inno_setup/inno_scripts/helpers.iss | 15 +++++-------- inno_setup/inno_scripts/install_handler.iss | 25 ++++++++++++--------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 5c61afd8a..acafd29ba 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -3,17 +3,12 @@ [Code] -// Remove ampersand characters from a string (used to remove mnemonics from messages) -function RemoveAmpersand(InputString: string): string; -var - i: Integer; +// Replace OldSubstring with the specified NewSubstring in InputString +function ReplaceSubstring(InputString: string; OldSubstring: string; NewSubstring: string): string; begin - Result := ''; - for i := 1 to Length(InputString) do - begin - if InputString[i] <> '&' then - Result := Result + InputString[i]; - end; + // For info on StringChangeEx: https://jrsoftware.org/ishelp/index.php?topic=isxfunc_stringchange + Result := InputString; + StringChangeEx(Result, OldSubstring, NewSubstring, True); end; // Compare two version strings in X.X.X.X format diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 7681bce6e..4cfed5d0b 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -150,8 +150,7 @@ var CurrentRoot: Integer; RootName: string; VersionComparison: Integer; - NewerVersionInstalledString: string; - VersionAlreadyInstalledString: string; + MsgBoxString: string; begin Result := True; @@ -183,12 +182,15 @@ begin if VersionComparison > 0 then begin // This message (translated into all languages supported by Inno Setup), reads: - // The existing file is newer than the one Setup is trying to install. version {Installer_ExeProductVersion} < version {Existing_ExeProductVersion} + // The existing file is newer than the one Setup is trying to install. version {Existing_ExeProductVersion} > version {Installer_ExeProductVersion} // Example: - // The existing file is newer than the one Setup is trying to install. version 25.0.0.36 < version 25.0.1.8 - NewerVersionInstalledString := SetupMessage(msgExistingFileNewer2) + ' ' + FmtMessage(CustomMessage('NameAndVersion'), ['', ExpandConstant('{#ExeProductVersion}')]) + ' <' + FmtMessage(CustomMessage('NameAndVersion'), ['', DisplayVersion]); + // The existing file is newer than the one Setup is trying to install. version 25.0.1.8 > version 25.0.0.36 + MsgBoxString := SetupMessage(msgExistingFileNewer2) + + FmtMessage(CustomMessage('NameAndVersion'), ['', DisplayVersion]) + + ' >' + + FmtMessage(CustomMessage('NameAndVersion'), ['', ExpandConstant('{#ExeProductVersion}')]); // For info on MsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_msgbox - MsgBox(NewerVersionInstalledString, mbError, MB_OK); + MsgBox(MsgBoxString, mbError, MB_OK); Log('Newer version detected. Exiting installation.'); Result := False; Exit; @@ -196,13 +198,14 @@ begin else if VersionComparison = 0 then begin // This message (translated into all languages supported by Inno Setup), reads: - // {APP_NAME} -- The file already exists. Overwrite the existing file? + // Setup is preparing to install {APP_NAME} on your computer. The file already exists. Overwrite the existing file? // Example: - // Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64) -- The file already exists. Overwrite the existing file? - // Note: see helpers.iss for RemoveAmpersand() function - VersionAlreadyInstalledString := ExpandConstant('{#AppName}') + ' -- ' + SetupMessage(msgFileExists2) + ' ' + RemoveAmpersand(SetupMessage(msgFileExistsOverwriteExisting)) + '?'; + // Setup is preparing to install Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64) on your computer. The file already exists. Overwrite the existing file? + MsgBoxString := ReplaceSubstring(SetupMessage(msgPreparingDesc), '[name]', ExpandConstant('{#AppName}')) + + ' ' + SetupMessage(msgFileExists2) + + ' ' + ReplaceSubstring(SetupMessage(msgFileExistsOverwriteExisting), '&', '') + '?'; // For info on SuppressibleMsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_suppressiblemsgbox - if SuppressibleMsgBox(VersionAlreadyInstalledString, mbInformation, MB_YESNO, IDYES) = IDYES then + if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then begin Log('Same version detected: "' + DisplayVersion + '". Proceeding with reinstallation.'); end From 6ae5ffa54c7d4b0b56827dd760535b18bea88680 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 31 Oct 2025 10:14:03 -0700 Subject: [PATCH 28/49] Now using name for env task --- inno_setup/create_exe.template.iss | 10 +++---- inno_setup/inno_scripts/install_handler.iss | 4 +-- inno_setup/inno_scripts/uninstall_handler.iss | 2 +- inno_setup/translations/default.iss | 28 +++++++++---------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 9a508219b..22eb2a89b 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -81,7 +81,7 @@ UsePreviousPrivileges=no [Tasks] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=taskssection -Name: "pathMod"; Description: "{cm:PathModDesc}"; GroupDescription: "{cm:PathModTitle}"; +Name: "FeatureEnvironment"; Description: "{cm:FeatureEnvironmentDesc}"; GroupDescription: "{cm:FeatureEnvironmentTitle}"; ; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; @@ -126,16 +126,16 @@ Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{ ValueType: dword; ValueName: "Main"; ValueData: "1"; \ Flags: uninsdeletekey; -; pathMod: Add Environment Path keys if the user requests them +; FeatureEnvironment: Add Environment Path keys if the user requests them Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPath"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: WasTaskSelected('pathMod'); + Flags: uninsdeletekey; Check: WasTaskSelected('FeatureEnvironment'); Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPathSetForSystem"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('pathMod'); + Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('FeatureEnvironment'); Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "EnvironmentPathSetForUser"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('pathMod'); + Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('FeatureEnvironment'); ; jarfileMod: Add .jar file association keys if the user requests them ; Note: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids is diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 4cfed5d0b..8b8d29a78 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -124,14 +124,14 @@ begin // Store task selections just after the actual installation finishes but before registry entries are created else if CurStep = ssPostInstall then begin - StoreTaskSelections('pathMod'); + StoreTaskSelections('FeatureEnvironment'); StoreTaskSelections('jarfileMod'); StoreTaskSelections('javaHomeMod'); StoreTaskSelections('javasoftMod'); StoreTaskSelections('METADATA'); // Add {app}\bin to PATH only if the user requested it - if WasTaskSelected('pathMod') then + if WasTaskSelected('FeatureEnvironment') then AddToPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); end; end; diff --git a/inno_setup/inno_scripts/uninstall_handler.iss b/inno_setup/inno_scripts/uninstall_handler.iss index e11ffd48f..9ae478783 100755 --- a/inno_setup/inno_scripts/uninstall_handler.iss +++ b/inno_setup/inno_scripts/uninstall_handler.iss @@ -48,7 +48,7 @@ begin if CurUninstallStep = usUninstall then begin // Remove {app}\bin from PATH only if added during installation - if WasTaskSelected('pathMod') then + if WasTaskSelected('FeatureEnvironment') then RemoveFromPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); end; end; diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index f69488f3c..48f131b71 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -29,60 +29,60 @@ Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplifie ; Example: we are using AssocFileExtension from this list ; Custom task descriptions - English (default) -PathModDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. +FeatureEnvironmentDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. JavaHomeModDesc=Sets or overrides JAVA_HOME environment variable with the JDK installation directory. JavaSoftModDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. -PathModTitle=Modify PATH variable +FeatureEnvironmentTitle=Modify PATH variable JavaHomeModTitle=Set or override JAVA_HOME variable FileAssocTitle=Associate .jar RegKeysTitle=JavaSoft (Oracle) registry keys -German.PathModDesc=In die PATH-Umgebungsvariable einfügen. +German.FeatureEnvironmentDesc=In die PATH-Umgebungsvariable einfügen. German.JavaHomeModDesc=Als JAVA_HOME-Umgebungsvariable verwenden. ; German.JavaSoftModDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. -German.PathModTitle=Zum PATH hinzufügen +German.FeatureEnvironmentTitle=Zum PATH hinzufügen German.JavaHomeModTitle=JAVA_HOME-Variable konfigurieren ; German.FileAssocTitle=.jar-Datei verknüpfen ; German.RegKeysTitle=JavaSoft (Oracle) Registrierungsschlüssel -Spanish.PathModDesc=Añadir a la variable de entorno PATH. +Spanish.FeatureEnvironmentDesc=Añadir a la variable de entorno PATH. Spanish.JavaHomeModDesc=Establecer la variable de entorno JAVA_HOME. Spanish.JavaSoftModDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. -Spanish.PathModTitle=Añadir al PATH +Spanish.FeatureEnvironmentTitle=Añadir al PATH Spanish.JavaHomeModTitle=Establecer la variable JAVA_HOME Spanish.FileAssocTitle=Asociar .jar Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) -French.PathModDesc=Ajouter à la variable d'environnement PATH. +French.FeatureEnvironmentDesc=Ajouter à la variable d'environnement PATH. French.JavaHomeModDesc=Définir la variable d'environnement JAVA_HOME. French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin -French.PathModTitle=Ajouter au PATH +French.FeatureEnvironmentTitle=Ajouter au PATH French.JavaHomeModTitle=Définir la variable JAVA_HOME French.FileAssocTitle=Associer les .jar French.RegKeysTitle=Clés de registre JavaSoft (Oracle) -; Japanese.PathModDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 +; Japanese.FeatureEnvironmentDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 ; Japanese.JavaHomeModDesc=JDKインストールディレクトリでJAVA_HOME環境変数を設定または上書きします。 ; Japanese.JavaSoftModDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 -; Japanese.PathModTitle=PATH変数を変更 +; Japanese.FeatureEnvironmentTitle=PATH変数を変更 ; Japanese.JavaHomeModTitle=JAVA_HOME変数を設定または上書き ; Japanese.FileAssocTitle=.jarを関連付け ; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー #ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS -ChineseCN.PathModDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. +ChineseCN.FeatureEnvironmentDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. ChineseCN.JavaHomeModDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. ; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 -ChineseCN.PathModTitle=修改 PATH 变量值. +ChineseCN.FeatureEnvironmentTitle=修改 PATH 变量值. ChineseCN.JavaHomeModTitle=设置或重写 JAVA_HOME 变量. ; ChineseCN.FileAssocTitle=关联 .jar ; ChineseCN.RegKeysTitle=JavaSoft (Oracle) 注册表项 -ChineseTW.PathModDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. +ChineseTW.FeatureEnvironmentDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. ChineseTW.JavaHomeModDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME 環境變數值. ; ChineseTW.JavaSoftModDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 -ChineseTW.PathModTitle=修改 PATH 變數值 +ChineseTW.FeatureEnvironmentTitle=修改 PATH 變數值 ChineseTW.JavaHomeModTitle=設定或重寫 JAVA_HOME 變量 ; ChineseTW.FileAssocTitle=關聯 .jar ; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 From 8148d386279cec1ba7ddfeccba4219742362beca Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 31 Oct 2025 10:20:59 -0700 Subject: [PATCH 29/49] Updated 'jarfileMod' task to 'FeatureJarFileRunWith' --- inno_setup/create_exe.template.iss | 18 +++++++++--------- inno_setup/inno_scripts/install_handler.iss | 2 +- inno_setup/translations/default.iss | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 22eb2a89b..94e9c4696 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -82,8 +82,8 @@ UsePreviousPrivileges=no [Tasks] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=taskssection Name: "FeatureEnvironment"; Description: "{cm:FeatureEnvironmentDesc}"; GroupDescription: "{cm:FeatureEnvironmentTitle}"; -; AssocFileExtension is an Inno Setup provided translation provides this message into every language: &Associate %1 with the %2 file extension -Name: "jarfileMod"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FileAssocTitle}"; +; AssocFileExtension is an Inno Setup provided translation. This message is translated into every language: &Associate %1 with the %2 file extension +Name: "FeatureJarFileRunWith"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FeatureJarFileRunWithTitle}"; Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; ; HKLM keys can only be created/modified in Admin Install Mode Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; @@ -137,23 +137,23 @@ Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{ ValueType: dword; ValueName: "EnvironmentPathSetForUser"; ValueData: "1"; \ Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('FeatureEnvironment'); -; jarfileMod: Add .jar file association keys if the user requests them +; FeatureJarFileRunWith: Add .jar file association keys if the user requests them ; Note: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jar\OpenWithProgids is ; automatically created by Windows when running jar file for the first time Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ ValueType: string; ValueName: ""; ValueData: "{#Vendor}.jarfile"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); Root: HKA; Subkey: "SOFTWARE\Classes\.jar"; \ ValueType: string; ValueName: "Content Type"; ValueData: "application/java-archive"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); ; Creating null keys this way to make sure that they are removed as expected during uninstallation -Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); -Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); -Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); +Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open"; ValueType: none; Flags: uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); ; Two doublequotes (") are used in the ValueName to escape the quotes properly. Example value written to key: "C:\Program Files\Adoptium\jdk-17.0.15.6-hotspot\bin\javaw.exe" -jar "%1" %* Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open\command"; \ ValueType: string; ValueName: ""; ValueData: """{app}\bin\javaw.exe"" -jar ""%1"" %*"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('jarfileMod'); + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureJarFileRunWith'); ; TODO: Add HKA keys for JDK8 on x64 (if IcedTeaWeb is bundled) to process .jnlp files (similar to the .jar file handling above). ; OR: decide that EXEs will no longer support JDK8 and remove this TODO diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 8b8d29a78..3dd2e7ac8 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -125,7 +125,7 @@ begin else if CurStep = ssPostInstall then begin StoreTaskSelections('FeatureEnvironment'); - StoreTaskSelections('jarfileMod'); + StoreTaskSelections('FeatureJarFileRunWith'); StoreTaskSelections('javaHomeMod'); StoreTaskSelections('javasoftMod'); StoreTaskSelections('METADATA'); diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index 48f131b71..332f32bb8 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -34,7 +34,7 @@ JavaHomeModDesc=Sets or overrides JAVA_HOME environment variable with the JDK in JavaSoftModDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. FeatureEnvironmentTitle=Modify PATH variable JavaHomeModTitle=Set or override JAVA_HOME variable -FileAssocTitle=Associate .jar +FeatureJarFileRunWithTitle=Associate .jar RegKeysTitle=JavaSoft (Oracle) registry keys German.FeatureEnvironmentDesc=In die PATH-Umgebungsvariable einfügen. @@ -42,7 +42,7 @@ German.JavaHomeModDesc=Als JAVA_HOME-Umgebungsvariable verwenden. ; German.JavaSoftModDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. German.FeatureEnvironmentTitle=Zum PATH hinzufügen German.JavaHomeModTitle=JAVA_HOME-Variable konfigurieren -; German.FileAssocTitle=.jar-Datei verknüpfen +; German.FeatureJarFileRunWithTitle=.jar-Datei verknüpfen ; German.RegKeysTitle=JavaSoft (Oracle) Registrierungsschlüssel Spanish.FeatureEnvironmentDesc=Añadir a la variable de entorno PATH. @@ -50,7 +50,7 @@ Spanish.JavaHomeModDesc=Establecer la variable de entorno JAVA_HOME. Spanish.JavaSoftModDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. Spanish.FeatureEnvironmentTitle=Añadir al PATH Spanish.JavaHomeModTitle=Establecer la variable JAVA_HOME -Spanish.FileAssocTitle=Asociar .jar +Spanish.FeatureJarFileRunWithTitle=Asociar .jar Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) French.FeatureEnvironmentDesc=Ajouter à la variable d'environnement PATH. @@ -58,7 +58,7 @@ French.JavaHomeModDesc=Définir la variable d'environnement JAVA_HOME. French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin French.FeatureEnvironmentTitle=Ajouter au PATH French.JavaHomeModTitle=Définir la variable JAVA_HOME -French.FileAssocTitle=Associer les .jar +French.FeatureJarFileRunWithTitle=Associer les .jar French.RegKeysTitle=Clés de registre JavaSoft (Oracle) ; Japanese.FeatureEnvironmentDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 @@ -66,7 +66,7 @@ French.RegKeysTitle=Clés de registre JavaSoft (Oracle) ; Japanese.JavaSoftModDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 ; Japanese.FeatureEnvironmentTitle=PATH変数を変更 ; Japanese.JavaHomeModTitle=JAVA_HOME変数を設定または上書き -; Japanese.FileAssocTitle=.jarを関連付け +; Japanese.FeatureJarFileRunWithTitle=.jarを関連付け ; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー #ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS @@ -76,7 +76,7 @@ ChineseCN.JavaHomeModDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME ; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 ChineseCN.FeatureEnvironmentTitle=修改 PATH 变量值. ChineseCN.JavaHomeModTitle=设置或重写 JAVA_HOME 变量. -; ChineseCN.FileAssocTitle=关联 .jar +; ChineseCN.FeatureJarFileRunWithTitle=关联 .jar ; ChineseCN.RegKeysTitle=JavaSoft (Oracle) 注册表项 ChineseTW.FeatureEnvironmentDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. @@ -84,7 +84,7 @@ ChineseTW.JavaHomeModDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME ; ChineseTW.JavaSoftModDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 ChineseTW.FeatureEnvironmentTitle=修改 PATH 變數值 ChineseTW.JavaHomeModTitle=設定或重寫 JAVA_HOME 變量 -; ChineseTW.FileAssocTitle=關聯 .jar +; ChineseTW.FeatureJarFileRunWithTitle=關聯 .jar ; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 #endif \ No newline at end of file From 331c731b5ceb2eec61b4fc63380ed3ec77a1c3e1 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 31 Oct 2025 10:23:18 -0700 Subject: [PATCH 30/49] Updated 'javaHomeMod' to 'FeatureJavaHome' --- inno_setup/create_exe.template.iss | 14 +++++------ inno_setup/inno_scripts/install_handler.iss | 2 +- inno_setup/translations/default.iss | 28 ++++++++++----------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 94e9c4696..bc630dc66 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -84,7 +84,7 @@ UsePreviousPrivileges=no Name: "FeatureEnvironment"; Description: "{cm:FeatureEnvironmentDesc}"; GroupDescription: "{cm:FeatureEnvironmentTitle}"; ; AssocFileExtension is an Inno Setup provided translation. This message is translated into every language: &Associate %1 with the %2 file extension Name: "FeatureJarFileRunWith"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FeatureJarFileRunWithTitle}"; -Name: "javaHomeMod"; Description: "{cm:JavaHomeModDesc}"; GroupDescription: "{cm:JavaHomeModTitle}"; Flags: unchecked; +Name: "FeatureJavaHome"; Description: "{cm:FeatureJavaHomeDesc}"; GroupDescription: "{cm:FeatureJavaHomeTitle}"; Flags: unchecked; ; HKLM keys can only be created/modified in Admin Install Mode Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; @@ -157,24 +157,24 @@ Root: HKA; Subkey: "SOFTWARE\Classes\{#Vendor}.jarfile\shell\open\command"; \ ; TODO: Add HKA keys for JDK8 on x64 (if IcedTeaWeb is bundled) to process .jnlp files (similar to the .jar file handling above). ; OR: decide that EXEs will no longer support JDK8 and remove this TODO -; javaHomeMod: Add JavaHome keys if the user requests them +; FeatureJavaHome: Add JavaHome keys if the user requests them Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHome"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: WasTaskSelected('javaHomeMod'); + Flags: uninsdeletekey; Check: WasTaskSelected('FeatureJavaHome'); Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHomeSetForSystem"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('javaHomeMod'); + Flags: uninsdeletekey; Check: IsAdminInstallMode and WasTaskSelected('FeatureJavaHome'); Root: HKA; Subkey: "SOFTWARE\{#Vendor}\{#ProductCategory}\{#ExeProductVersion}\{#JVM}\EXE"; \ ValueType: dword; ValueName: "JavaHomeSetForUser"; ValueData: "1"; \ - Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('javaHomeMod'); + Flags: uninsdeletekey; Check: not IsAdminInstallMode and WasTaskSelected('FeatureJavaHome'); ; Add JAVA_HOME env var for system-level environment variables (admin install) Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \ ValueType: string; ValueName: "JAVA_HOME"; ValueData: "{app}"; \ - Flags: uninsdeletevalue; Check: IsAdminInstallMode and WasTaskSelected('javaHomeMod'); + Flags: uninsdeletevalue; Check: IsAdminInstallMode and WasTaskSelected('FeatureJavaHome'); ; Add JAVA_HOME env var for user-level environment variables (user install) Root: HKCU; Subkey: "Environment"; \ ValueType: string; ValueName: "JAVA_HOME"; ValueData: "{app}"; \ - Flags: uninsdeletevalue; Check: not IsAdminInstallMode and WasTaskSelected('javaHomeMod'); + Flags: uninsdeletevalue; Check: not IsAdminInstallMode and WasTaskSelected('FeatureJavaHome'); ; javasoftMod: Add JavaSoft Keys if the user requests them Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}"; \ diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 3dd2e7ac8..6ff3e8fb5 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -126,7 +126,7 @@ begin begin StoreTaskSelections('FeatureEnvironment'); StoreTaskSelections('FeatureJarFileRunWith'); - StoreTaskSelections('javaHomeMod'); + StoreTaskSelections('FeatureJavaHome'); StoreTaskSelections('javasoftMod'); StoreTaskSelections('METADATA'); diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index 332f32bb8..13f1a31cd 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -30,60 +30,60 @@ Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplifie ; Custom task descriptions - English (default) FeatureEnvironmentDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. -JavaHomeModDesc=Sets or overrides JAVA_HOME environment variable with the JDK installation directory. +FeatureJavaHomeDesc=Sets or overrides JAVA_HOME environment variable with the JDK installation directory. JavaSoftModDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. FeatureEnvironmentTitle=Modify PATH variable -JavaHomeModTitle=Set or override JAVA_HOME variable +FeatureJavaHomeTitle=Set or override JAVA_HOME variable FeatureJarFileRunWithTitle=Associate .jar RegKeysTitle=JavaSoft (Oracle) registry keys German.FeatureEnvironmentDesc=In die PATH-Umgebungsvariable einfügen. -German.JavaHomeModDesc=Als JAVA_HOME-Umgebungsvariable verwenden. +German.FeatureJavaHomeDesc=Als JAVA_HOME-Umgebungsvariable verwenden. ; German.JavaSoftModDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. German.FeatureEnvironmentTitle=Zum PATH hinzufügen -German.JavaHomeModTitle=JAVA_HOME-Variable konfigurieren +German.FeatureJavaHomeTitle=JAVA_HOME-Variable konfigurieren ; German.FeatureJarFileRunWithTitle=.jar-Datei verknüpfen ; German.RegKeysTitle=JavaSoft (Oracle) Registrierungsschlüssel Spanish.FeatureEnvironmentDesc=Añadir a la variable de entorno PATH. -Spanish.JavaHomeModDesc=Establecer la variable de entorno JAVA_HOME. +Spanish.FeatureJavaHomeDesc=Establecer la variable de entorno JAVA_HOME. Spanish.JavaSoftModDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. Spanish.FeatureEnvironmentTitle=Añadir al PATH -Spanish.JavaHomeModTitle=Establecer la variable JAVA_HOME +Spanish.FeatureJavaHomeTitle=Establecer la variable JAVA_HOME Spanish.FeatureJarFileRunWithTitle=Asociar .jar Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) French.FeatureEnvironmentDesc=Ajouter à la variable d'environnement PATH. -French.JavaHomeModDesc=Définir la variable d'environnement JAVA_HOME. +French.FeatureJavaHomeDesc=Définir la variable d'environnement JAVA_HOME. French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin French.FeatureEnvironmentTitle=Ajouter au PATH -French.JavaHomeModTitle=Définir la variable JAVA_HOME +French.FeatureJavaHomeTitle=Définir la variable JAVA_HOME French.FeatureJarFileRunWithTitle=Associer les .jar French.RegKeysTitle=Clés de registre JavaSoft (Oracle) ; Japanese.FeatureEnvironmentDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 -; Japanese.JavaHomeModDesc=JDKインストールディレクトリでJAVA_HOME環境変数を設定または上書きします。 +; Japanese.FeatureJavaHomeDesc=JDKインストールディレクトリでJAVA_HOME環境変数を設定または上書きします。 ; Japanese.JavaSoftModDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 ; Japanese.FeatureEnvironmentTitle=PATH変数を変更 -; Japanese.JavaHomeModTitle=JAVA_HOME変数を設定または上書き +; Japanese.FeatureJavaHomeTitle=JAVA_HOME変数を設定または上書き ; Japanese.FeatureJarFileRunWithTitle=.jarを関連付け ; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー #ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS ChineseCN.FeatureEnvironmentDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. -ChineseCN.JavaHomeModDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. +ChineseCN.FeatureJavaHomeDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. ; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 ChineseCN.FeatureEnvironmentTitle=修改 PATH 变量值. -ChineseCN.JavaHomeModTitle=设置或重写 JAVA_HOME 变量. +ChineseCN.FeatureJavaHomeTitle=设置或重写 JAVA_HOME 变量. ; ChineseCN.FeatureJarFileRunWithTitle=关联 .jar ; ChineseCN.RegKeysTitle=JavaSoft (Oracle) 注册表项 ChineseTW.FeatureEnvironmentDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. -ChineseTW.JavaHomeModDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME 環境變數值. +ChineseTW.FeatureJavaHomeDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME 環境變數值. ; ChineseTW.JavaSoftModDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 ChineseTW.FeatureEnvironmentTitle=修改 PATH 變數值 -ChineseTW.JavaHomeModTitle=設定或重寫 JAVA_HOME 變量 +ChineseTW.FeatureJavaHomeTitle=設定或重寫 JAVA_HOME 變量 ; ChineseTW.FeatureJarFileRunWithTitle=關聯 .jar ; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 From c8d0857addaf9b4413faa343f366381406c1102e Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 31 Oct 2025 10:26:57 -0700 Subject: [PATCH 31/49] Updated 'javasoftMod' to 'FeatureOracleJavaSoft' --- inno_setup/create_exe.template.iss | 20 +++++++-------- inno_setup/inno_scripts/install_handler.iss | 2 +- inno_setup/translations/default.iss | 28 ++++++++++----------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index bc630dc66..c6e1b3748 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -81,12 +81,12 @@ UsePreviousPrivileges=no [Tasks] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=taskssection -Name: "FeatureEnvironment"; Description: "{cm:FeatureEnvironmentDesc}"; GroupDescription: "{cm:FeatureEnvironmentTitle}"; +Name: "FeatureEnvironment"; Description: "{cm:FeatureEnvironmentDesc}"; GroupDescription: "{cm:FeatureEnvironmentTitle}"; ; AssocFileExtension is an Inno Setup provided translation. This message is translated into every language: &Associate %1 with the %2 file extension -Name: "FeatureJarFileRunWith"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FeatureJarFileRunWithTitle}"; -Name: "FeatureJavaHome"; Description: "{cm:FeatureJavaHomeDesc}"; GroupDescription: "{cm:FeatureJavaHomeTitle}"; Flags: unchecked; +Name: "FeatureJarFileRunWith"; Description: "{cm:AssocFileExtension,{#AppName},.jar}"; GroupDescription: "{cm:FeatureJarFileRunWithTitle}"; +Name: "FeatureJavaHome"; Description: "{cm:FeatureJavaHomeDesc}"; GroupDescription: "{cm:FeatureJavaHomeTitle}"; Flags: unchecked; ; HKLM keys can only be created/modified in Admin Install Mode -Name: "javasoftMod"; Description: "{cm:JavaSoftModDesc,{#AppName}}"; GroupDescription: "{cm:RegKeysTitle}"; Flags: unchecked; Check: IsAdminInstallMode; +Name: "FeatureOracleJavaSoft"; Description: "{cm:FeatureOracleJavaSoftDesc,{#AppName}}"; GroupDescription: "{cm:FeatureOracleJavaSoftTitle}"; Flags: unchecked; Check: IsAdminInstallMode; [Files] ; For more info, see https://jrsoftware.org/ishelp/index.php?topic=filessection @@ -176,24 +176,24 @@ Root: HKCU; Subkey: "Environment"; \ ValueType: string; ValueName: "JAVA_HOME"; ValueData: "{app}"; \ Flags: uninsdeletevalue; Check: not IsAdminInstallMode and WasTaskSelected('FeatureJavaHome'); -; javasoftMod: Add JavaSoft Keys if the user requests them +; FeatureOracleJavaSoft: Add JavaSoft Keys if the user requests them Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}"; \ ValueType: string; ValueName: "CurrentVersion"; ValueData: "{#ProductMajorVersion}"; \ - Flags: uninsdeletevalue; Check: (ShouldUpdateJavaVersion and not IsUninstaller and WasTaskSelected('javasoftMod')) or (IsUninstaller and WasTaskSelected('javasoftMod')); + Flags: uninsdeletevalue; Check: (ShouldUpdateJavaVersion and not IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')) or (IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')); Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureOracleJavaSoft'); Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; \ ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ - Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); + Flags: uninsdeletekey; Check: WasTaskSelected('FeatureOracleJavaSoft'); ; The RuntimeLib key is only used by JREs, not JDKs #if ProductCategory == "JRE" Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ - Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('javasoftMod'); + Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureOracleJavaSoft'); Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ - Flags: uninsdeletekey; Check: WasTaskSelected('javasoftMod'); + Flags: uninsdeletekey; Check: WasTaskSelected('FeatureOracleJavaSoft'); #endif ; TODO: Add HKLM key for JDK8 on x64 (if IcedTeaWeb is bundled) below ; OR: decide that EXEs will no longer support JDK8 and remove this TODO diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 6ff3e8fb5..1c913245c 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -127,7 +127,7 @@ begin StoreTaskSelections('FeatureEnvironment'); StoreTaskSelections('FeatureJarFileRunWith'); StoreTaskSelections('FeatureJavaHome'); - StoreTaskSelections('javasoftMod'); + StoreTaskSelections('FeatureOracleJavaSoft'); StoreTaskSelections('METADATA'); // Add {app}\bin to PATH only if the user requested it diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index 13f1a31cd..87c44504c 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -31,60 +31,60 @@ Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplifie ; Custom task descriptions - English (default) FeatureEnvironmentDesc=Modify PATH environment variable by prepending the JDK installation directory to the beginning of PATH. FeatureJavaHomeDesc=Sets or overrides JAVA_HOME environment variable with the JDK installation directory. -JavaSoftModDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. +FeatureOracleJavaSoftDesc=Overwrites Oracle's reg key HKLM\Software\JavaSoft. After uninstallation of %1, Oracle Java needs to be reinstalled to re-create these registry keys. FeatureEnvironmentTitle=Modify PATH variable FeatureJavaHomeTitle=Set or override JAVA_HOME variable FeatureJarFileRunWithTitle=Associate .jar -RegKeysTitle=JavaSoft (Oracle) registry keys +FeatureOracleJavaSoftTitle=JavaSoft (Oracle) registry keys German.FeatureEnvironmentDesc=In die PATH-Umgebungsvariable einfügen. German.FeatureJavaHomeDesc=Als JAVA_HOME-Umgebungsvariable verwenden. -; German.JavaSoftModDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. +; German.FeatureOracleJavaSoftDesc=Überschreibt Oracles Registrierungsschlüssel HKLM\Software\JavaSoft. Nach der Deinstallation von %1 muss Oracle Java neu installiert werden, um diese Registrierungsschlüssel wiederherzustellen. German.FeatureEnvironmentTitle=Zum PATH hinzufügen German.FeatureJavaHomeTitle=JAVA_HOME-Variable konfigurieren ; German.FeatureJarFileRunWithTitle=.jar-Datei verknüpfen -; German.RegKeysTitle=JavaSoft (Oracle) Registrierungsschlüssel +; German.FeatureOracleJavaSoftTitle=JavaSoft (Oracle) Registrierungsschlüssel Spanish.FeatureEnvironmentDesc=Añadir a la variable de entorno PATH. Spanish.FeatureJavaHomeDesc=Establecer la variable de entorno JAVA_HOME. -Spanish.JavaSoftModDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. +Spanish.FeatureOracleJavaSoftDesc=Sobrescribir las claves de registro HKLM\Software\JavaSoft (Oracle). Si se desinstala %1, la ejecución de Oracle Java desde la ruta "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" no funcionará. Será necesario reinstalarlo. Spanish.FeatureEnvironmentTitle=Añadir al PATH Spanish.FeatureJavaHomeTitle=Establecer la variable JAVA_HOME Spanish.FeatureJarFileRunWithTitle=Asociar .jar -Spanish.RegKeysTitle=Claves de registro JavaSoft (Oracle) +Spanish.FeatureOracleJavaSoftTitle=Claves de registro JavaSoft (Oracle) French.FeatureEnvironmentDesc=Ajouter à la variable d'environnement PATH. French.FeatureJavaHomeDesc=Définir la variable d'environnement JAVA_HOME. -French.JavaSoftModDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin +French.FeatureOracleJavaSoftDesc=Écrase les clés de registre HKLM\Software\JavaSoft (Oracle). Après la désinstallation d'%1, Oracle Java lancé depuis le PATH "C:\Program Files (x86)\Common Files\Oracle\Java\javapath" ne fonctionne plus. Réinstaller Oracle Java si besoin French.FeatureEnvironmentTitle=Ajouter au PATH French.FeatureJavaHomeTitle=Définir la variable JAVA_HOME French.FeatureJarFileRunWithTitle=Associer les .jar -French.RegKeysTitle=Clés de registre JavaSoft (Oracle) +French.FeatureOracleJavaSoftTitle=Clés de registre JavaSoft (Oracle) ; Japanese.FeatureEnvironmentDesc=JDKインストールディレクトリをPATHの先頭に追加してPATH環境変数を変更します。 ; Japanese.FeatureJavaHomeDesc=JDKインストールディレクトリでJAVA_HOME環境変数を設定または上書きします。 -; Japanese.JavaSoftModDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 +; Japanese.FeatureOracleJavaSoftDesc=OracleのレジストリキーHKLM\Software\JavaSoftを上書きします。%1のアンインストール後、これらのレジストリキーを再作成するにはOracle Javaの再インストールが必要です。 ; Japanese.FeatureEnvironmentTitle=PATH変数を変更 ; Japanese.FeatureJavaHomeTitle=JAVA_HOME変数を設定または上書き ; Japanese.FeatureJarFileRunWithTitle=.jarを関連付け -; Japanese.RegKeysTitle=JavaSoft (Oracle) レジストリキー +; Japanese.FeatureOracleJavaSoftTitle=JavaSoft (Oracle) レジストリキー #ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS ChineseCN.FeatureEnvironmentDesc=通过将 JDK 安装路径添加到 PATH 值开头来修改 PATH 环境变量值. ChineseCN.FeatureJavaHomeDesc=使用 JDK 安装路径来设置或重写 JAVA_HOME 环境变量值. -; ChineseCN.JavaSoftModDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 +; ChineseCN.FeatureOracleJavaSoftDesc=覆盖 Oracle 的注册表项 HKLM\Software\JavaSoft。卸载 %1 后,需要重新安装 Oracle Java 以重新创建这些注册表项。 ChineseCN.FeatureEnvironmentTitle=修改 PATH 变量值. ChineseCN.FeatureJavaHomeTitle=设置或重写 JAVA_HOME 变量. ; ChineseCN.FeatureJarFileRunWithTitle=关联 .jar -; ChineseCN.RegKeysTitle=JavaSoft (Oracle) 注册表项 +; ChineseCN.FeatureOracleJavaSoftTitle=JavaSoft (Oracle) 注册表项 ChineseTW.FeatureEnvironmentDesc=將 JDK 安裝路徑新增至 PATH 值開頭來修改 PATH 環境變數值. ChineseTW.FeatureJavaHomeDesc=使用 JDK 安裝路徑來設定或重寫 JAVA_HOME 環境變數值. -; ChineseTW.JavaSoftModDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 +; ChineseTW.FeatureOracleJavaSoftDesc=覆寫 Oracle 的登錄機碼 HKLM\Software\JavaSoft。解除安裝 %1 後,需要重新安裝 Oracle Java 以重新建立這些登錄機碼。 ChineseTW.FeatureEnvironmentTitle=修改 PATH 變數值 ChineseTW.FeatureJavaHomeTitle=設定或重寫 JAVA_HOME 變量 ; ChineseTW.FeatureJarFileRunWithTitle=關聯 .jar -; ChineseTW.RegKeysTitle=JavaSoft (Oracle) 登錄機碼 +; ChineseTW.FeatureOracleJavaSoftTitle=JavaSoft (Oracle) 登錄機碼 #endif \ No newline at end of file From 6c08534dee7d183f79123016697645930bb651b7 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Fri, 31 Oct 2025 13:22:53 -0700 Subject: [PATCH 32/49] Fixed unofficial translations bug, added spacing --- inno_setup/CreateExe.ps1 | 86 +++++++++++++++-------------- inno_setup/translations/default.iss | 16 +++--- 2 files changed, 54 insertions(+), 48 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 54385e684..2e6f1f012 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -314,7 +314,8 @@ if (-not $UpgradeCodeSeed) { # If no UpgradeCodeSeed is given, generate a new PRODUCT_UPGRADE_CODE (random GUID, not upgradable) $PRODUCT_UPGRADE_CODE = [guid]::NewGuid().ToString("B").ToUpper() Write-Host "Unique PRODUCT_UPGRADE_CODE: $PRODUCT_UPGRADE_CODE" -} else { +} +else { # Generate a deterministic PRODUCT_UPGRADE_CODE based on input values and UpgradeCodeSeed # Compose SOURCE_TEXT_GUID similar to the original script $SOURCE_TEXT_GUID = "${ProductCategory}-${ProductMajorVersion}-${Arch}-${JVM}" @@ -327,54 +328,59 @@ if (-not $UpgradeCodeSeed) { # /DAppId: Inno setup needs us to escape '{' literals by putting two together. The '}' does not need to be escaped $AppId = "{" + "${PRODUCT_UPGRADE_CODE}" -# Sign only if $SigningCommand is not empty or null -# See the following link for more info on Inno Setup signing: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool -# See here for info on /S flag format: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline -if (![string]::IsNullOrEmpty($SigningCommand)) { - Write-Host "Executing Inno Setup with signing." - $SigningArg = "/SsigningCommand=$SigningCommand" - $ExtraArgs = '/DsignFiles="true"' # set this flag to enable signing with above command -} else { - Write-Host "Executing Inno Setup without signing." - $SigningArg = "" - $ExtraArgs = "" -} +# Build the argument list +# For info on CLI options: https://jrsoftware.org/ishelp/index.php?topic=isppcc +# and https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +$InnoSetupArgs = @() + +$InnoSetupArgs += "/J$TranslationFile" +$InnoSetupArgs += "/DArchitecturesAllowed=`"$ArchitecturesAllowed`"" +$InnoSetupArgs += "/DAppName=`"$AppName`"" +$InnoSetupArgs += "/DVendor=`"$Vendor`"" +$InnoSetupArgs += "/DProductCategory=`"$ProductCategory`"" +$InnoSetupArgs += "/DJVM=`"$JVM`"" +$InnoSetupArgs += "/DProductMajorVersion=`"$ProductMajorVersion`"" +$InnoSetupArgs += "/DProductMinorVersion=`"$ProductMinorVersion`"" +$InnoSetupArgs += "/DProductMaintenanceVersion=`"$ProductMaintenanceVersion`"" +$InnoSetupArgs += "/DProductPatchVersion=`"$ProductPatchVersion`"" +$InnoSetupArgs += "/DProductBuildNumber=`"$ProductBuildNumber`"" +$InnoSetupArgs += "/DExeProductVersion=`"$ExeProductVersion`"" +$InnoSetupArgs += "/DAppPublisherURL=`"$ProductPublisherLink`"" +$InnoSetupArgs += "/DAppSupportURL=`"$ProductSupportLink`"" +$InnoSetupArgs += "/DAppUpdatesURL=`"$ProductUpdateInfoLink`"" +$InnoSetupArgs += "/DOutputFileName=`"$OutputFileName`"" +$InnoSetupArgs += "/DVendorBrandingLogo=`"$VendorBrandingLogo`"" +$InnoSetupArgs += "/DVendorBrandingDialog=`"$VendorBrandingDialog`"" +$InnoSetupArgs += "/DVendorBrandingSmallIcon=`"$VendorBrandingSmallIcon`"" +$InnoSetupArgs += "/DLicenseFile=`"$License`"" +$InnoSetupArgs += "/DAppId=`"$AppId`"" +$InnoSetupArgs += "/DSourceFiles=`"$unzippedFolder`"" # Set this flag to support unofficial inno_setup translations like Chinese ## Note: Here, unofficial means that there are a few default messages that do not ## have translations (from English) supported by Inno Setup yet if ($IncludeUnofficialTranslations -ne "false") { Write-Host "Including unofficial translations." - $ExtraArgs += ' /DINCLUDE_UNOFFICIAL_TRANSLATIONS="true"' + $InnoSetupArgs += '/DINCLUDE_UNOFFICIAL_TRANSLATIONS="true"' +} + +# Sign only if $SigningCommand is not empty or null +# See the following link for more info on Inno Setup signing: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool +# See here for info on /S flag format: https://jrsoftware.org/ishelp/index.php?topic=compilercmdline +if (![string]::IsNullOrEmpty($SigningCommand)) { + Write-Host "Executing Inno Setup with signing." + $InnoSetupArgs += "/SsigningCommand=$SigningCommand" + # set flag /DsignFiles to enable signing with above command + $InnoSetupArgs += '/DsignFiles="true"' +} +else { + Write-Host "Executing Inno Setup without signing." } -# For info on CLI options: https://jrsoftware.org/ishelp/index.php?topic=isppcc -# and https://jrsoftware.org/ishelp/index.php?topic=compilercmdline # Create .exe file based on create_exe.template.iss. -& "$INNO_SETUP_PATH" $SigningArg ` - /J$TranslationFile ` - /DArchitecturesAllowed="$ArchitecturesAllowed" ` - /DAppName="$AppName" ` - /DVendor="$Vendor" ` - /DProductCategory="$ProductCategory" ` - /DJVM="$JVM" ` - /DProductMajorVersion="$ProductMajorVersion" ` - /DProductMinorVersion="$ProductMinorVersion" ` - /DProductMaintenanceVersion="$ProductMaintenanceVersion" ` - /DProductPatchVersion="$ProductPatchVersion" ` - /DProductBuildNumber="$ProductBuildNumber" ` - /DExeProductVersion="$ExeProductVersion" ` - /DAppPublisherURL="$ProductPublisherLink" ` - /DAppSupportURL="$ProductSupportLink" ` - /DAppUpdatesURL="$ProductUpdateInfoLink" ` - /DOutputFileName="$OutputFileName" ` - /DVendorBrandingLogo="$VendorBrandingLogo" ` - /DVendorBrandingDialog="$VendorBrandingDialog" ` - /DVendorBrandingSmallIcon="$VendorBrandingSmallIcon" ` - /DLicenseFile="$License" ` - /DAppId="$AppId" ` - /DSourceFiles="$unzippedFolder" ` - $ExtraArgs "${InnoSetupRootDir}\create_exe.template.iss" +$InnoSetupArgs += "${InnoSetupRootDir}\create_exe.template.iss" +# Run the Inno Setup Compiler (ISCC.exe) with the arguments +& "$INNO_SETUP_PATH" @InnoSetupArgs CheckForError -ErrorMessage "ISCC.exe failed to create .exe file." diff --git a/inno_setup/translations/default.iss b/inno_setup/translations/default.iss index 87c44504c..7d752ec8d 100755 --- a/inno_setup/translations/default.iss +++ b/inno_setup/translations/default.iss @@ -3,17 +3,17 @@ ; [CustomMessages]: contains the list of translations for the custom tasks that the user can select during installation. [Languages] -Name: "English"; MessagesFile: "compiler:Default.isl" -Name: "German"; MessagesFile: "compiler:Languages\German.isl" -Name: "Spanish"; MessagesFile: "compiler:Languages\Spanish.isl" -Name: "French"; MessagesFile: "compiler:Languages\French.isl" -Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "English"; MessagesFile: "compiler:Default.isl" +Name: "German"; MessagesFile: "compiler:Languages\German.isl" +Name: "Spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "French"; MessagesFile: "compiler:Languages\French.isl" +Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl" #ifdef INCLUDE_UNOFFICIAL_TRANSLATIONS ; Note: ChineseTW and ChineseCN still need translations for certain progress-bar screen messages -Name: "ChineseTW"; MessagesFile: "compiler:Languages\Unofficial\ChineseTraditional.isl" -Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplified.isl" +Name: "ChineseTW"; MessagesFile: "compiler:Languages\Unofficial\ChineseTraditional.isl" +Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplified.isl" #endif @@ -22,7 +22,7 @@ Name: "ChineseCN"; MessagesFile: "compiler:Languages\Unofficial\ChineseSimplifie ; 1) All translations in the initial PR were pulled directly from the wix MSI installer translation files (Jul 2025) ; 2) Any missing translations will default to English ; 3) When testing translations, the `Yes` and `No` buttons will always be in the language of the user's machine (regardless of the selected language in the installer) -; 4) All commented out translations were made by copilot and need to be verified before using/uncommenting +; 4) All commented out translations were made by AI and need to be verified before using/uncommenting ; 5) Translation entries allow us to have input arguments. They are specified as %1, %2, etc. ; For a list of default custom messages (Translated by Inno Setup), see: https://jrsoftware.org/ishelp/index.php?topic=custommessagessection From e9f29f4072540bef6781ee89ffdddad078edb5e1 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 11:18:00 -0800 Subject: [PATCH 33/49] Testing MSI installation detection --- inno_setup/inno_scripts/helpers.iss | 69 ++++++++++++++++++++- inno_setup/inno_scripts/install_handler.iss | 41 ++++++++---- 2 files changed, 98 insertions(+), 12 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index acafd29ba..63e73408c 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -6,7 +6,7 @@ // Replace OldSubstring with the specified NewSubstring in InputString function ReplaceSubstring(InputString: string; OldSubstring: string; NewSubstring: string): string; begin - // For info on StringChangeEx: https://jrsoftware.org/ishelp/index.php?topic=isxfunc_stringchange + // For info on StringChangeEx: https://jrsoftware.org/ishelp/index.php?topic=isxfunc_stringchangeex Result := InputString; StringChangeEx(Result, OldSubstring, NewSubstring, True); end; @@ -65,4 +65,71 @@ begin end; end; +// Reverses an MSI GUID upgrade code to standard GUID format +// Needed for determining the mapping between MSI Upgrade Codes and MSI Product Codes in the registry +function ReverseMSIGUID(const RevCode: string; IncludeHyphens: Boolean): string; +var + RevCodePlain, part1, part2, part3, part4, part5: string; + + function ReversePairs(const s: string): string; + var + i: Integer; + resultStr: string; + begin + Result := ''; + for i := Length(s) downto 1 do + Result := Result + s[i]; + end; + +begin + // Remove hyphens if present + // Revcodes stored in '\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes' do not have hyphens + RevCodePlain := ReplaceSubstring(RevCode, '-', ''); + // Remove braces if present -- same issue as above + RevCodePlain := ReplaceSubstring(RevCodePlain, '{', ''); + RevCodePlain := ReplaceSubstring(RevCodePlain, '}', ''); + + // Break into segments + part1 := Copy(RevCodePlain, 1, 8); + part2 := Copy(RevCodePlain, 9, 4); + part3 := Copy(RevCodePlain, 13, 4); + part4 := Copy(RevCodePlain, 17, 4); + part5 := Copy(RevCodePlain, 21, 12); + + // Reverse each segment in pairs + part1 := ReversePairs(part1); + part2 := ReversePairs(part2); + part3 := ReversePairs(part3); + part4 := ReversePairs(part4); + part5 := ReversePairs(part5); + + // Combine into GUID format + if IncludeHyphens then + Result := part1 + '-' + part2 + '-' + part3 + '-' + part4 + '-' + part5 + else + Result := part1 + part2 + part3 + part4 + part5; +end; + +// Returns true if an MSI installation with the given UpgradeCode exists in the specified RegistryRoot, +// and sets MsiGuid to the corresponding ProductCode if found. Otherwise, returns false. +function GetInstalledMsiString(RegistryRoot: Integer; var UpgradeCode: string; var MsiGuid: string): Boolean; +var + ValueNames: TArrayOfString; + i: Integer; +begin + if RegGetValueNames(RegistryRoot, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes\' + ReverseMSIGUID(UpgradeCode, False), ValueNames) then + begin + for i := 0 to GetArrayLength(ValueNames)-1 do + begin + if ValueNames[i] <> '' then // skip empty or default + begin + MsiGuid := ReverseMSIGUID(ValueNames[i], True); + Result := True; + Exit; + end; + end; + end; + Result := False; +end; + #endif \ No newline at end of file diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 1c913245c..2cc7dd387 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -58,7 +58,9 @@ end; // Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default procedure UninstallPreviousVersion(); var - UninstallKey: string; + UninstallKeyPath: string; + UninstallKeyExe: string; + MsiGuid: string; UninstallString: string; ResultCode: Integer; DisplayName: string; @@ -67,6 +69,7 @@ var i: Integer; CurrentRoot: Integer; RootName: string; + FoundInstallation: Boolean; begin // Initialize arrays for registry roots and their names RegistryRoots[0] := HKLM; @@ -75,20 +78,24 @@ begin RootNames[1] := 'user'; // All EXE uninstall strings are stored here, regardless of vendor - UninstallKey := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); + UninstallKeyPath := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'; + UninstallKeyExe := UninstallKeyPath + '\' + ExpandConstant('{#AppID}_is1'); // Loop through both HKLM and HKCU for i := 0 to 1 do begin + FoundInstallation := False; CurrentRoot := RegistryRoots[i]; RootName := RootNames[i]; - if RegQueryStringValue(CurrentRoot, UninstallKey, 'UninstallString', UninstallString) then + // Check for EXE uninstaller. If found, var UninstallString is assigned + if RegQueryStringValue(CurrentRoot, UninstallKeyExe, 'UninstallString', UninstallString) then begin - if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayName', DisplayName) then + if RegQueryStringValue(CurrentRoot, UninstallKeyExe, 'DisplayName', DisplayName) then begin Log('Found previous ' + RootName + ' installation: ' + DisplayName); end; + FoundInstallation := True; Log('Uninstall string (with quotes): ' + UninstallString); Log('Uninstall string (quotes removed): ' + RemoveQuotes(UninstallString)); @@ -101,8 +108,25 @@ begin begin Log('Failed to uninstall previous ' + RootName + ' installation. Result code: ' + IntToStr(ResultCode)); end; - end - else + end; + + // Check for MSI uninstaller. If found, var MsiGuid is assigned + if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then + begin + Log('Found installed MSI: ' + MsiGuid); + FoundInstallation := True; + // Uninstall the MSI silently + if Exec('MsiExec.exe', '/x ' + MsiGuid + ' /qn /norestart', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + begin + Log('Previous ' + RootName + ' MSI installation uninstalled successfully. Result code: ' + IntToStr(ResultCode)); + end + else + begin + Log('Failed to uninstall previous ' + RootName + ' MSI installation. Result code: ' + IntToStr(ResultCode)); + end; + end; + + if not FoundInstallation then begin Log('No previous ' + RootName + ' installation found.'); end; @@ -145,10 +169,8 @@ var DisplayVersion: string; DisplayName: string; RegistryRoots: array[0..1] of Integer; - RootNames: array[0..1] of string; i: Integer; CurrentRoot: Integer; - RootName: string; VersionComparison: Integer; MsgBoxString: string; begin @@ -157,8 +179,6 @@ begin // Initialize arrays for registry roots and their names RegistryRoots[0] := HKLM; RegistryRoots[1] := HKCU; - RootNames[0] := 'system'; - RootNames[1] := 'user'; // All EXE info is stored here, regardless of vendor UninstallKey := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); @@ -167,7 +187,6 @@ begin for i := 0 to 1 do begin CurrentRoot := RegistryRoots[i]; - RootName := RootNames[i]; // Check if a previous version was installed and compare if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayVersion', DisplayVersion) then From 41178de9f73558dddc95e9b16ddf7f9c7f7fa533 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 12:49:31 -0800 Subject: [PATCH 34/49] Updated upgrade code translator --- inno_setup/inno_scripts/helpers.iss | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 63e73408c..94662b22d 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -67,11 +67,26 @@ end; // Reverses an MSI GUID upgrade code to standard GUID format // Needed for determining the mapping between MSI Upgrade Codes and MSI Product Codes in the registry -function ReverseMSIGUID(const RevCode: string; IncludeHyphens: Boolean): string; +function ReverseMSIGUID(const RevCode: string; AddFormatting: Boolean): string; var RevCodePlain, part1, part2, part3, part4, part5: string; function ReversePairs(const s: string): string; + // Switches each pair of characters in the string + // Example: "A1B2C3" becomes "1A2B3C" + // Note: All MSI GUID segments have even lengths, so no need to handle odd-length strings + var + i: Integer; + resultStr: string; + begin + Result := ''; + for i := 1 to Length(s) step 2 do + Result := Result + s[i+1] + s[i]; + end; + + function ReverseChars(const s: string): string; + // Reverses the order of characters in the string + // Example: "ABCDEF" becomes "FEDCBA" var i: Integer; resultStr: string; @@ -97,15 +112,15 @@ begin part5 := Copy(RevCodePlain, 21, 12); // Reverse each segment in pairs - part1 := ReversePairs(part1); - part2 := ReversePairs(part2); - part3 := ReversePairs(part3); + part1 := ReverseChars(part1); + part2 := ReverseChars(part2); + part3 := ReverseChars(part3); part4 := ReversePairs(part4); part5 := ReversePairs(part5); // Combine into GUID format - if IncludeHyphens then - Result := part1 + '-' + part2 + '-' + part3 + '-' + part4 + '-' + part5 + if AddFormatting then + Result := '{' + part1 + '-' + part2 + '-' + part3 + '-' + part4 + '-' + part5 + '}' else Result := part1 + part2 + part3 + part4 + part5; end; From d919ca57f87f0049038dee4b72a22fbf855f42a7 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 12:50:02 -0800 Subject: [PATCH 35/49] Added debug msgbox for MSI detection --- inno_setup/inno_scripts/install_handler.iss | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 2cc7dd387..8992f431e 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -173,6 +173,7 @@ var CurrentRoot: Integer; VersionComparison: Integer; MsgBoxString: string; + MsiGuid: string; begin Result := True; @@ -188,6 +189,21 @@ begin begin CurrentRoot := RegistryRoots[i]; + if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then + begin + MsgBoxString := 'Found installed MSI: ' + MsiGuid + '. Should we continue the installation?'; + if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then + begin + Log('Found installed MSI: ' + MsiGuid); + end + else + begin + Log('User chose not to continue installation due to existing MSI: ' + MsiGuid); + Result := False; + Exit; + end; + end; + // Check if a previous version was installed and compare if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayVersion', DisplayVersion) then begin From 3ab659d4565fa26557dc70f83feffbc69db88afe Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 15:06:39 -0800 Subject: [PATCH 36/49] Fixed MSI dectection + uninstallation, added MsgBox warning --- inno_setup/inno_scripts/helpers.iss | 59 +++++++++---------- inno_setup/inno_scripts/install_handler.iss | 64 +++++++++++---------- 2 files changed, 63 insertions(+), 60 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 94662b22d..bc3d0b4fb 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -65,37 +65,38 @@ begin end; end; -// Reverses an MSI GUID upgrade code to standard GUID format -// Needed for determining the mapping between MSI Upgrade Codes and MSI Product Codes in the registry -function ReverseMSIGUID(const RevCode: string; AddFormatting: Boolean): string; +// Switches each pair of characters in the string +// Example: "A1B2C3" becomes "1A2B3C" +// Note: All MSI GUID segments have even lengths, so no need to handle odd-length strings +function ReversePairs(const s: string): string; var - RevCodePlain, part1, part2, part3, part4, part5: string; - - function ReversePairs(const s: string): string; - // Switches each pair of characters in the string - // Example: "A1B2C3" becomes "1A2B3C" - // Note: All MSI GUID segments have even lengths, so no need to handle odd-length strings - var - i: Integer; - resultStr: string; + i: Integer; +begin + Result := ''; + i := 1; + while i <= Length(s) do begin - Result := ''; - for i := 1 to Length(s) step 2 do - Result := Result + s[i+1] + s[i]; + Result := Result + s[i+1] + s[i]; + i := i + 2; end; +end; - function ReverseChars(const s: string): string; - // Reverses the order of characters in the string - // Example: "ABCDEF" becomes "FEDCBA" - var - i: Integer; - resultStr: string; - begin - Result := ''; - for i := Length(s) downto 1 do - Result := Result + s[i]; - end; +// Reverses the order of characters in the string +// Example: "ABCDEF" becomes "FEDCBA" +function ReverseChars(const s: string): string; +var + i: Integer; +begin + Result := ''; + for i := Length(s) downto 1 do + Result := Result + s[i]; +end; +// Reverses an MSI PRODUCT_UPGRADE_CODE to standard GUID format and vice versa +// Needed for determining the mapping between MSI PRODUCT_UPGRADE_CODE and MSI Product Codes in the registry +function ReverseMSIGUID(const RevCode: string; AddFormatting: Boolean): string; +var + RevCodePlain, part1, part2, part3, part4, part5: string; begin // Remove hyphens if present // Revcodes stored in '\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes' do not have hyphens @@ -125,9 +126,9 @@ begin Result := part1 + part2 + part3 + part4 + part5; end; -// Returns true if an MSI installation with the given UpgradeCode exists in the specified RegistryRoot, -// and sets MsiGuid to the corresponding ProductCode if found. Otherwise, returns false. -function GetInstalledMsiString(RegistryRoot: Integer; var UpgradeCode: string; var MsiGuid: string): Boolean; +// Returns true if an MSI installation with the given PRODUCT_UPGRADE_CODE exists in the specified RegistryRoot, +// and sets MsiGuid to the corresponding mapping if found. Otherwise, returns false. +function GetInstalledMsiString(RegistryRoot: Integer; UpgradeCode: string; var MsiGuid: string): Boolean; var ValueNames: TArrayOfString; i: Integer; diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 8992f431e..c651b4649 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -58,7 +58,6 @@ end; // Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default procedure UninstallPreviousVersion(); var - UninstallKeyPath: string; UninstallKeyExe: string; MsiGuid: string; UninstallString: string; @@ -69,7 +68,6 @@ var i: Integer; CurrentRoot: Integer; RootName: string; - FoundInstallation: Boolean; begin // Initialize arrays for registry roots and their names RegistryRoots[0] := HKLM; @@ -78,13 +76,11 @@ begin RootNames[1] := 'user'; // All EXE uninstall strings are stored here, regardless of vendor - UninstallKeyPath := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'; - UninstallKeyExe := UninstallKeyPath + '\' + ExpandConstant('{#AppID}_is1'); + UninstallKeyExe := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); // Loop through both HKLM and HKCU for i := 0 to 1 do begin - FoundInstallation := False; CurrentRoot := RegistryRoots[i]; RootName := RootNames[i]; @@ -95,7 +91,6 @@ begin begin Log('Found previous ' + RootName + ' installation: ' + DisplayName); end; - FoundInstallation := True; Log('Uninstall string (with quotes): ' + UninstallString); Log('Uninstall string (quotes removed): ' + RemoveQuotes(UninstallString)); @@ -114,7 +109,7 @@ begin if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then begin Log('Found installed MSI: ' + MsiGuid); - FoundInstallation := True; + // Uninstall the MSI silently if Exec('MsiExec.exe', '/x ' + MsiGuid + ' /qn /norestart', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then begin @@ -126,10 +121,6 @@ begin end; end; - if not FoundInstallation then - begin - Log('No previous ' + RootName + ' installation found.'); - end; end; end; @@ -165,7 +156,7 @@ end; // For more info, see https://jrsoftware.org/ishelp/index.php?topic=scriptevents function InitializeSetup(): Boolean; var - UninstallKey: string; + UninstallKeyExe: string; DisplayVersion: string; DisplayName: string; RegistryRoots: array[0..1] of Integer; @@ -182,32 +173,17 @@ begin RegistryRoots[1] := HKCU; // All EXE info is stored here, regardless of vendor - UninstallKey := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); + UninstallKeyExe := ExpandConstant('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#AppID}_is1'); // Loop through both HKLM and HKCU for i := 0 to 1 do begin CurrentRoot := RegistryRoots[i]; - if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then - begin - MsgBoxString := 'Found installed MSI: ' + MsiGuid + '. Should we continue the installation?'; - if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then - begin - Log('Found installed MSI: ' + MsiGuid); - end - else - begin - Log('User chose not to continue installation due to existing MSI: ' + MsiGuid); - Result := False; - Exit; - end; - end; - - // Check if a previous version was installed and compare - if RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayVersion', DisplayVersion) then + // Check if a previous version was installed via EXE and compare + if RegQueryStringValue(CurrentRoot, UninstallKeyExe, 'DisplayVersion', DisplayVersion) then begin - RegQueryStringValue(CurrentRoot, UninstallKey, 'DisplayName', DisplayName); + RegQueryStringValue(CurrentRoot, UninstallKeyExe, 'DisplayName', DisplayName); Log('Previous version to uninstall: ' + DisplayVersion); Log('Previous version display name: ' + DisplayName); @@ -243,6 +219,8 @@ begin if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then begin Log('Same version detected: "' + DisplayVersion + '". Proceeding with reinstallation.'); + // Exit here since we do not need to ask the user again if they want to overwrite older installations + Exit; end else begin @@ -252,6 +230,30 @@ begin end; end; end; + + // Check if a previous version was installed via MSI + if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then + begin + // This message (translated into all languages supported by Inno Setup), reads: + // Setup is preparing to install {APP_NAME} on your computer. The file already exists. Overwrite the existing file? + // Example: + // Setup is preparing to install Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64) on your computer. The file already exists. Overwrite the existing file? + MsgBoxString := ReplaceSubstring(SetupMessage(msgPreparingDesc), '[name]', ExpandConstant('{#AppName}')) + + ' ' + SetupMessage(msgFileExists2) + + ' ' + ReplaceSubstring(SetupMessage(msgFileExistsOverwriteExisting), '&', '') + '? + MSI'; + // For info on SuppressibleMsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_suppressiblemsgbox + if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then + begin + Log('Legacy MSI version detected. Proceeding with overwriting.'); + end + else + begin + Log('User chose not to overwrite legacy version.'); + Result := False; + Exit; + end; + end; + end; end; From ea705c7613d9f1c113ad8e2658d2bca5e1aa5bf5 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 15:11:48 -0800 Subject: [PATCH 37/49] Updated comments --- inno_setup/inno_scripts/helpers.iss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index bc3d0b4fb..2fb00b48d 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -112,10 +112,14 @@ begin part4 := Copy(RevCodePlain, 17, 4); part5 := Copy(RevCodePlain, 21, 12); - // Reverse each segment in pairs + // This is the process that Windows Installer uses to map UpgradeCodes to ProductCodes + + // Reverse the first three parts by character part1 := ReverseChars(part1); part2 := ReverseChars(part2); part3 := ReverseChars(part3); + +// Reverse the final two parts by pair part4 := ReversePairs(part4); part5 := ReversePairs(part5); From 0a332f1bb4248ed5bd32495e2e5319fdcb27434d Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 15:48:02 -0800 Subject: [PATCH 38/49] Updated function name --- inno_setup/inno_scripts/helpers.iss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 2fb00b48d..6933495c5 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -94,7 +94,7 @@ end; // Reverses an MSI PRODUCT_UPGRADE_CODE to standard GUID format and vice versa // Needed for determining the mapping between MSI PRODUCT_UPGRADE_CODE and MSI Product Codes in the registry -function ReverseMSIGUID(const RevCode: string; AddFormatting: Boolean): string; +function ReverseMsiGuid(const RevCode: string; AddFormatting: Boolean): string; var RevCodePlain, part1, part2, part3, part4, part5: string; begin @@ -137,13 +137,13 @@ var ValueNames: TArrayOfString; i: Integer; begin - if RegGetValueNames(RegistryRoot, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes\' + ReverseMSIGUID(UpgradeCode, False), ValueNames) then + if RegGetValueNames(RegistryRoot, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes\' + ReverseMsiGuid(UpgradeCode, False), ValueNames) then begin for i := 0 to GetArrayLength(ValueNames)-1 do begin if ValueNames[i] <> '' then // skip empty or default begin - MsiGuid := ReverseMSIGUID(ValueNames[i], True); + MsiGuid := ReverseMsiGuid(ValueNames[i], True); Result := True; Exit; end; From 541980f01d93856531d59a592be3d7d6acea5df8 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 15:51:35 -0800 Subject: [PATCH 39/49] Updated another function name --- inno_setup/inno_scripts/helpers.iss | 2 +- inno_setup/inno_scripts/install_handler.iss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 6933495c5..fd214130a 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -132,7 +132,7 @@ end; // Returns true if an MSI installation with the given PRODUCT_UPGRADE_CODE exists in the specified RegistryRoot, // and sets MsiGuid to the corresponding mapping if found. Otherwise, returns false. -function GetInstalledMsiString(RegistryRoot: Integer; UpgradeCode: string; var MsiGuid: string): Boolean; +function GetInstalledMsiGuid(RegistryRoot: Integer; UpgradeCode: string; var MsiGuid: string): Boolean; var ValueNames: TArrayOfString; i: Integer; diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index c651b4649..6e79e3ba5 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -106,7 +106,7 @@ begin end; // Check for MSI uninstaller. If found, var MsiGuid is assigned - if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then + if GetInstalledMsiGuid(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then begin Log('Found installed MSI: ' + MsiGuid); @@ -232,7 +232,7 @@ begin end; // Check if a previous version was installed via MSI - if GetInstalledMsiString(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then + if GetInstalledMsiGuid(CurrentRoot, ExpandConstant('{#AppID}'), MsiGuid) then begin // This message (translated into all languages supported by Inno Setup), reads: // Setup is preparing to install {APP_NAME} on your computer. The file already exists. Overwrite the existing file? From ddac017d0bcc65863ca5a3c4f76ac6818c04e6df Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 19:06:02 -0800 Subject: [PATCH 40/49] Now ensuring that JavaSoft reg key CurrentVersion is always highes LTS installed with FeatureOracleJavaSoft --- inno_setup/create_exe.template.iss | 2 +- inno_setup/inno_scripts/uninstall_handler.iss | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index c6e1b3748..6b26be47e 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -179,7 +179,7 @@ Root: HKCU; Subkey: "Environment"; \ ; FeatureOracleJavaSoft: Add JavaSoft Keys if the user requests them Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}"; \ ValueType: string; ValueName: "CurrentVersion"; ValueData: "{#ProductMajorVersion}"; \ - Flags: uninsdeletevalue; Check: (ShouldUpdateJavaVersion and not IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')) or (IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')); + Flags: uninsdeletekeyifempty; Check: (ShouldUpdateJavaVersion and not IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')) or (IsUninstaller and WasTaskSelected('FeatureOracleJavaSoft')); Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureOracleJavaSoft'); diff --git a/inno_setup/inno_scripts/uninstall_handler.iss b/inno_setup/inno_scripts/uninstall_handler.iss index 9ae478783..4a4b41b99 100755 --- a/inno_setup/inno_scripts/uninstall_handler.iss +++ b/inno_setup/inno_scripts/uninstall_handler.iss @@ -37,6 +37,67 @@ begin RegWriteStringValue(RegRoot, EnvRegKey, 'PATH', NewPath); end; +// Set registry key HKLM "SOFTWARE\JavaSoft\{#ProductCategory}" to either: +// 1. The name of the subkey that is the highest LTS integer (with FeatureOracleJavaSoft, ignore subkeys that are not integers) under "SOFTWARE\JavaSoft\{#ProductCategory}" +// 2. Delete the value if no other versions are found +procedure SetHighestJavaVersionRemaining(); +var + SubKeys: TArrayOfString; + i: Integer; + MaxVersion: Integer; + CurrentVersion: Integer; + MaxVersionStr: string; + CurrentVersionStr: string; +begin + // Initialize max version + MaxVersion := -1; + MaxVersionStr := ''; + + // Check that the JavaSoft registry key and corresponding CurrentVersion value exist + if not RegQueryStringValue(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}'), 'CurrentVersion', CurrentVersionStr) then + begin + // Key or value does not exist, so nothing to do + Exit; + end + else + begin + if CurrentVersionStr <> ExpandConstant('{#ProductMajorVersion}') then + begin + // Current version does not match our installed version, so no need to update + Exit; + end; + end; + + // Get subkeys under "SOFTWARE\JavaSoft\{#ProductCategory}" + if RegGetSubKeyNames(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}'), SubKeys) then + begin + // Iterate through subkeys to find the highest integer LTS JDK version installed (with FeatureOracleJavaSoft) + for i := 0 to GetArrayLength(SubKeys) - 1 do + begin + CurrentVersion := StrToIntDef(SubKeys[i], -1); + if (CurrentVersion > MaxVersion) and (SubKeys[i] <> ExpandConstant('{#ProductMajorVersion}')) then + begin + MaxVersion := CurrentVersion; + MaxVersionStr := SubKeys[i]; + end; + end; + // Set or delete the CurrentVersion value based on the max version found + if MaxVersion > 0 then + begin + // Set CurrentVersion to the highest LTS version still on the User's system (with FeatureOracleJavaSoft) + RegWriteStringValue(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}'), 'CurrentVersion', MaxVersionStr); + end + else + begin + // No JDKs with FeatureOracleJavaSoft remaining on the user's system, so delete the RegistryKey + RegDeleteValue(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}'), 'CurrentVersion'); + RegDeleteKeyIfEmpty(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}')); + end; + end; +end; + + + // This function defines uninstallation logic at each step of the uninstallation process: // usUninstall - just before the actual uninstallation starts // usPostUninstall - just after the actual uninstallation finishes @@ -49,7 +110,14 @@ begin begin // Remove {app}\bin from PATH only if added during installation if WasTaskSelected('FeatureEnvironment') then + begin RemoveFromPath(ExpandConstant('{app}\bin'), GetEnvironmentRegPath(), GetRegistryRoot()); + end; + + if WasTaskSelected('FeatureOracleJavaSoft') then + begin + SetHighestJavaVersionRemaining(); + end; end; end; From 259efd19d34c662363d425f260f9c398d75ade23 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Wed, 5 Nov 2025 19:18:34 -0800 Subject: [PATCH 41/49] Updated comments --- inno_setup/inno_scripts/helpers.iss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index fd214130a..2ef6825d0 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -37,17 +37,19 @@ begin // Compare each part for i := 0 to MaxLen do begin - // Get the part as integer (default to 0 if not present) + // Get the part of V1 as integer (default to 0 if not present) if i < V1Parts.Count then Part1 := StrToIntDef(V1Parts[i], 0) else Part1 := 0; + // Get the part of V2 as integer (default to 0 if not present) if i < V2Parts.Count then Part2 := StrToIntDef(V2Parts[i], 0) else Part2 := 0; + // Compare the part if Part1 < Part2 then begin Result := -1; @@ -119,7 +121,7 @@ begin part2 := ReverseChars(part2); part3 := ReverseChars(part3); -// Reverse the final two parts by pair + // Reverse the final two parts by pair part4 := ReversePairs(part4); part5 := ReversePairs(part5); From 3272aa4dc6abc619dd5b0ef8bd343ed051da6a37 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 6 Nov 2025 11:27:04 -0800 Subject: [PATCH 42/49] Fixed typos, added comment --- inno_setup/create_exe.template.iss | 2 +- inno_setup/inno_scripts/install_handler.iss | 2 +- inno_setup/inno_scripts/uninstall_handler.iss | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index 6b26be47e..bb1b0a053 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -187,7 +187,7 @@ Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ Flags: uninsdeletekey; Check: WasTaskSelected('FeatureOracleJavaSoft'); ; The RuntimeLib key is only used by JREs, not JDKs -#if ProductCategory == "JRE" +#if ProductCategory == "jre" Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureOracleJavaSoft'); diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 6e79e3ba5..7ffea7d81 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -240,7 +240,7 @@ begin // Setup is preparing to install Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64) on your computer. The file already exists. Overwrite the existing file? MsgBoxString := ReplaceSubstring(SetupMessage(msgPreparingDesc), '[name]', ExpandConstant('{#AppName}')) + ' ' + SetupMessage(msgFileExists2) + - ' ' + ReplaceSubstring(SetupMessage(msgFileExistsOverwriteExisting), '&', '') + '? + MSI'; + ' ' + ReplaceSubstring(SetupMessage(msgFileExistsOverwriteExisting), '&', '') + '?'; // For info on SuppressibleMsgBox(), see https://jrsoftware.org/ishelp/index.php?topic=isxfunc_suppressiblemsgbox if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then begin diff --git a/inno_setup/inno_scripts/uninstall_handler.iss b/inno_setup/inno_scripts/uninstall_handler.iss index 4a4b41b99..7d9ee0395 100755 --- a/inno_setup/inno_scripts/uninstall_handler.iss +++ b/inno_setup/inno_scripts/uninstall_handler.iss @@ -91,7 +91,9 @@ begin begin // No JDKs with FeatureOracleJavaSoft remaining on the user's system, so delete the RegistryKey RegDeleteValue(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}'), 'CurrentVersion'); + // Delete the remaining JavaSoft keys if empty RegDeleteKeyIfEmpty(HKLM, ExpandConstant('SOFTWARE\JavaSoft\{#ProductCategory}')); + RegDeleteKeyIfEmpty(HKLM, ExpandConstant('SOFTWARE\JavaSoft')); end; end; end; From f91102762b17bf5845586cc4ff8218d5ba9d26e6 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 6 Nov 2025 15:57:08 -0800 Subject: [PATCH 43/49] Updated default inputs and casing --- inno_setup/CreateExe.ps1 | 8 ++++---- inno_setup/create_exe.template.iss | 3 +-- inno_setup/inno_scripts/get_constants.iss | 8 ++++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index 2e6f1f012..a34003a9c 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -50,7 +50,7 @@ .PARAMETER AppName Optional. The name of the App. Example: "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)" - Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion+$ProductBuildNumber ($Arch)" + Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.+$ProductBuildNumber ($Arch)" .PARAMETER Vendor Optional. Default: Eclipse Adoptium @@ -87,7 +87,7 @@ .PARAMETER OutputFileName Optional. The name of the output file. Note: Inno Setup will automatically add the '.exe' file extension Default: - "OpenJDK${ProductMajorVersion}-$ProductCategory_$Arch_windows_$JVM-$ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.$ProductPatchVersion.$ProductBuildNumber" + "OpenJDK${ProductMajorVersion}U-$ProductCategory_$Arch_windows_$JVM-$ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.$ProductPatchVersion_$ProductBuildNumber" .PARAMETER License Optional. The path to the license file. This can either be a full path to any file, or a relative path to a license file in the inno_setup/licenses folder. @@ -288,7 +288,7 @@ $AppName = SetDefaultIfEmpty ` ## Note: Inno Setup will add the '.exe' file extension automatically $OutputFileName = SetDefaultIfEmpty ` -InputValue $OutputFileName ` - -DefaultValue "OpenJDK${ProductMajorVersion}-${ProductCategory}_${Arch}_windows_${JVM}-${VersionMajorToMaintenance}.${ProductPatchVersion}.${ProductBuildNumber}" + -DefaultValue "OpenJDK${ProductMajorVersion}U-${ProductCategory}_${Arch}_windows_${JVM}_${VersionMajorToMaintenance}_${ProductBuildNumber}" ## If $env:INNO_SETUP_PATH is not set, default to the standard installation path for a machine-scope installation $INNO_SETUP_PATH = SetDefaultIfEmpty ` @@ -337,7 +337,7 @@ $InnoSetupArgs += "/J$TranslationFile" $InnoSetupArgs += "/DArchitecturesAllowed=`"$ArchitecturesAllowed`"" $InnoSetupArgs += "/DAppName=`"$AppName`"" $InnoSetupArgs += "/DVendor=`"$Vendor`"" -$InnoSetupArgs += "/DProductCategory=`"$ProductCategory`"" +$InnoSetupArgs += "/DProductCategory=`"$($ProductCategory.ToUpper())`"" $InnoSetupArgs += "/DJVM=`"$JVM`"" $InnoSetupArgs += "/DProductMajorVersion=`"$ProductMajorVersion`"" $InnoSetupArgs += "/DProductMinorVersion=`"$ProductMinorVersion`"" diff --git a/inno_setup/create_exe.template.iss b/inno_setup/create_exe.template.iss index bb1b0a053..17630d6e9 100644 --- a/inno_setup/create_exe.template.iss +++ b/inno_setup/create_exe.template.iss @@ -8,7 +8,6 @@ ; Define useful variables based off inputs #define OutputDir "output" #define IniFile '{app}\install_tasks.ini' -#define ProductFolder ProductCategory + "-" + ExeProductVersion + "-" + JVM ; Include code helper scripts #include "inno_scripts\install_handler.iss" @@ -187,7 +186,7 @@ Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ExeProductVersion}"; ValueType: string; ValueName: "JavaHome"; ValueData: "{app}"; \ Flags: uninsdeletekey; Check: WasTaskSelected('FeatureOracleJavaSoft'); ; The RuntimeLib key is only used by JREs, not JDKs -#if ProductCategory == "jre" +#if ProductCategory == "JRE" Root: HKLM; Subkey: "SOFTWARE\JavaSoft\{#ProductCategory}\{#ProductMajorVersion}"; \ ValueType: string; ValueName: "RuntimeLib"; ValueData: "{app}\bin\server\jvm.dll"; \ Flags: uninsdeletevalue uninsdeletekeyifempty; Check: WasTaskSelected('FeatureOracleJavaSoft'); diff --git a/inno_setup/inno_scripts/get_constants.iss b/inno_setup/inno_scripts/get_constants.iss index 51e60531a..a0a25463c 100755 --- a/inno_setup/inno_scripts/get_constants.iss +++ b/inno_setup/inno_scripts/get_constants.iss @@ -23,14 +23,18 @@ end; // Returns the default installation directory based on the installation mode and system architecture function GetDefaultDir(Param: string): string; +var + DefaultProductFolder: string; begin + // Example: jdk-25.0.1.8-hotspot + DefaultProductFolder := Lowercase(ExpandConstant('{#ProductCategory}')) + '-' + ExpandConstant('{#ExeProductVersion}') + '-' + ExpandConstant('{#JVM}'); if IsAdminInstallMode then // Here {commonpf}='C:\Program Files' for x64, aarch64, and x86 Archs since // 'ArchitecturesInstallIn64BitMode=win64' was set in [Setup] - Result := ExpandConstant('{commonpf}\{#Vendor}\{#ProductFolder}') + Result := ExpandConstant('{commonpf}\{#Vendor}\' + DefaultProductFolder) else // {userpf}='C:\Users\\AppData\Local\Programs' - Result := ExpandConstant('{userpf}\{#Vendor}\{#ProductFolder}'); + Result := ExpandConstant('{userpf}\{#Vendor}\' + DefaultProductFolder); end; #endif From 819f59b0bda3d5774d5d0ed0402270fb0714c97a Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 6 Nov 2025 15:58:13 -0800 Subject: [PATCH 44/49] Updated install_handler to be able to uninstall MSIs in all cases --- inno_setup/inno_scripts/install_handler.iss | 25 +++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 7ffea7d81..89cab7e9f 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -56,7 +56,7 @@ end; // Uninstall the previous version of the same openJDK package if it exists // Logs if /LOG is passed into compile cli, or if SetupLogging=yes in [Setup] section // Without a specified log location, logs to: '%TEMP%\Setup Log YYYY-MM-DD #001.txt' by default -procedure UninstallPreviousVersion(); +procedure UninstallPreviousInstallation(); var UninstallKeyExe: string; MsiGuid: string; @@ -110,14 +110,24 @@ begin begin Log('Found installed MSI: ' + MsiGuid); - // Uninstall the MSI silently - if Exec('MsiExec.exe', '/x ' + MsiGuid + ' /qn /norestart', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + // Uninstall the MSI silently - try with elevation if needed + if not Exec('MsiExec.exe', '/x ' + MsiGuid + ' /qn /norestart', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) or (ResultCode = 1603) then begin - Log('Previous ' + RootName + ' MSI installation uninstalled successfully. Result code: ' + IntToStr(ResultCode)); + Log('MSI uninstall failed or requires elevation. Result code: ' + IntToStr(ResultCode) + '. Attempting with elevation.'); + // Try with elevated permissions using ShellExec + // 'runas' verb to request elevation. Allowed verbs documented at: https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea#parameters + if ShellExec('runas', 'MsiExec.exe', '/x ' + MsiGuid + ' /qn /norestart', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + begin + Log('Previous ' + RootName + ' MSI installation uninstalled successfully with elevation. Result code: ' + IntToStr(ResultCode)); + end + else + begin + Log('Failed to uninstall previous ' + RootName + ' MSI installation even with elevation. Result code: ' + IntToStr(ResultCode)); + end; end else begin - Log('Failed to uninstall previous ' + RootName + ' MSI installation. Result code: ' + IntToStr(ResultCode)); + Log('Previous ' + RootName + ' MSI installation uninstalled successfully. Result code: ' + IntToStr(ResultCode)); end; end; @@ -133,8 +143,8 @@ procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin - // Uninstall previous version if it exists - UninstallPreviousVersion(); + // Uninstall previous installation if it exists + UninstallPreviousInstallation(); end // Store task selections just after the actual installation finishes but before registry entries are created else if CurStep = ssPostInstall then @@ -245,6 +255,7 @@ begin if SuppressibleMsgBox(MsgBoxString, mbInformation, MB_YESNO, IDYES) = IDYES then begin Log('Legacy MSI version detected. Proceeding with overwriting.'); + Exit; end else begin From d6fab077e750d81bf992e2498fb238f4a7ebe784 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Thu, 6 Nov 2025 16:17:53 -0800 Subject: [PATCH 45/49] Updated func name --- inno_setup/inno_scripts/helpers.iss | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/inno_setup/inno_scripts/helpers.iss b/inno_setup/inno_scripts/helpers.iss index 2ef6825d0..e366d56f0 100644 --- a/inno_setup/inno_scripts/helpers.iss +++ b/inno_setup/inno_scripts/helpers.iss @@ -68,6 +68,7 @@ begin end; // Switches each pair of characters in the string +// This is needed to programmatically "reverse" MSI GUID segments to find its mapping to the Product Upgrade Code // Example: "A1B2C3" becomes "1A2B3C" // Note: All MSI GUID segments have even lengths, so no need to handle odd-length strings function ReversePairs(const s: string): string; @@ -84,8 +85,9 @@ begin end; // Reverses the order of characters in the string +// This is needed to programmatically "reverse" MSI GUID segments to find its mapping to the Product Upgrade Code // Example: "ABCDEF" becomes "FEDCBA" -function ReverseChars(const s: string): string; +function ReverseString(const s: string): string; var i: Integer; begin @@ -117,9 +119,9 @@ begin // This is the process that Windows Installer uses to map UpgradeCodes to ProductCodes // Reverse the first three parts by character - part1 := ReverseChars(part1); - part2 := ReverseChars(part2); - part3 := ReverseChars(part3); + part1 := ReverseString(part1); + part2 := ReverseString(part2); + part3 := ReverseString(part3); // Reverse the final two parts by pair part4 := ReversePairs(part4); From 5a9e9f89ef2d2121b759172d9a58f8846b3ca75c Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Mon, 10 Nov 2025 16:44:31 -0800 Subject: [PATCH 46/49] Updated comments --- inno_setup/CreateExe.ps1 | 2 +- inno_setup/inno_scripts/install_handler.iss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inno_setup/CreateExe.ps1 b/inno_setup/CreateExe.ps1 index a34003a9c..1c4fb928c 100644 --- a/inno_setup/CreateExe.ps1 +++ b/inno_setup/CreateExe.ps1 @@ -50,7 +50,7 @@ .PARAMETER AppName Optional. The name of the App. Example: "Eclipse Temurin JDK with Hotspot 25.0.1+8 (x64)" - Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion.+$ProductBuildNumber ($Arch)" + Default: "$VendorBranding $($ProductCategory.ToUpper()) with $CapitalizedJVM $ProductMajorVersion.$ProductMinorVersion.$ProductMaintenanceVersion+$ProductBuildNumber ($Arch)" .PARAMETER Vendor Optional. Default: Eclipse Adoptium diff --git a/inno_setup/inno_scripts/install_handler.iss b/inno_setup/inno_scripts/install_handler.iss index 89cab7e9f..79918c92c 100755 --- a/inno_setup/inno_scripts/install_handler.iss +++ b/inno_setup/inno_scripts/install_handler.iss @@ -143,7 +143,7 @@ procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin - // Uninstall previous installation if it exists + // Uninstall existing JDK of the same LTS if it exists UninstallPreviousInstallation(); end // Store task selections just after the actual installation finishes but before registry entries are created From 2dfc634222286353d113d170ec65d7eb89085294 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Sat, 6 Dec 2025 01:34:44 +0000 Subject: [PATCH 47/49] Added a README.md --- inno_setup/README.md | 112 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 inno_setup/README.md diff --git a/inno_setup/README.md b/inno_setup/README.md new file mode 100644 index 000000000..8de54a2d4 --- /dev/null +++ b/inno_setup/README.md @@ -0,0 +1,112 @@ +# Introduction +This tool is designed to create EXE files which are modern and accessibility-friendly. This EXE format provides a reliable and user-friendly installation experience, including a graphical installer interface that achieves the highest standards for accessibility. When installed, the folder `jdk-${ExeProductVersion}-${JVM}` is placed at `C:\Program Files\${Vendor}\` (for machine-wide installs), or `C:\Users\${env:USERNAME}\AppData\Local\Programs\${Vendor}\` (for user installs). + +# How to create EXE files + +## Dependencies +The following files are required in order to successfully run `CreateExe.ps1`. +- Inno Setup: + - Main download page: https://jrsoftware.org/isdl.php + - Direct download link: https://jrsoftware.org/download.php/is.exe?site=1 + - Note: by default, the compiler is downloaded to the path `C:\Program Files (x86)\Inno Setup 6\ISCC.exe`. If Inno Setup is installed to another path, you will need to set `$env:INNO_SETUP_PATH` to this new path. + +## Creating EXE files through CreateExe.ps1 +Please take a look at the [Dependencies](#dependencies) section above to make sure that you have everything needed in order to run our `CreateExe.ps1` script successfully. In this section, you will find a few examples for how to run our script from a powershell terminal. + +For more information on each variable, use the `powershell` command `Get-Help -Detailed .\CreateExe.ps1` or see the `powershell` style header within `inno_setup\CreateExe.ps1` + +**First Example**: Running with all required + optional inputs. Below, you will see the inputs divided into sections: required, optional with a default value (shown below), and optional + changes behavior if omitted. This example builds an Eclipse Temurin EXE file for jdk `21.0.8+9` +```powershell + .\CreateExe.ps1 ` + # Mandatory inputs + -ZipFileUrl "https://example.com/file.zip" ` # You can use either ZipFileUrl or ZipFilePath, not both + -ProductMajorVersion 21 ` + -ProductMinorVersion 0 ` + -ProductMaintenanceVersion 8 ` + -ProductPatchVersion 0 ` + -ProductBuildNumber 9 ` + -ExeProductVersion "21.0.8.9" ` + -Arch "aarch64" ` + -JVM "hotspot" ` + -ProductCategory "jdk" ` + # Optional inputs: These are the defaults that will be used if not specified + -AppName "Eclipse Temurin JDK with Hotspot 21.0.8+9 (aarch64)" ` + -Vendor "Eclipse Adoptium" ` + -VendorBranding "Eclipse Temurin" ` + -VendorBrandingLogo "logos\logo.ico" ` + -VendorBrandingDialog "logos\welcome-dialog.png" ` + -VendorBrandingSmallIcon "logos\logo-small.png" ` + -ProductPublisherLink "https://adoptium.net" ` + -ProductSupportLink "https://adoptium.net/support" ` + -ProductUpdateInfoLink "https://adoptium.net/temurin/releases" ` + -OutputFileName "OpenJDK21-jdk_aarch64_windows_hotspot-21.0.8.0.9" ` + -License "licenses/license-GPLv2+CE.en-us.rtf" ` + -UpgradeCodeSeed "MySecretSeedCode(SameAsWix)" ` + -TranslationFile "translations/default.iss" ` + # Additional Optional Inputs: Omitting these inputs will cause their associated process to be skipped + -IncludeUnofficialTranslations "true" ` + -SigningCommand "signtool.exe sign /f C:\path\to\cert" # For more explanation, see: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool +``` + +**Second Example**: Running with only required inputs. This will produce an EXE file, but many values (ex: OutputFileName) will take the default Eclipse/Adoptium value. Note: either `-ZipFilePath` or `-ZipFileUrl` are required inputs, but you cannot specify both. This example builds an Eclipse Temurin EXE file for jdk `17.0.16+8` +```powershell +.\CreateExe.ps1 ` + -ZipFilePath "C:\path\to\file.zip" ` # You can use either ZipFileUrl or ZipFilePath, not both + -ProductMajorVersion 17 ` + -ProductMinorVersion 0 ` + -ProductMaintenanceVersion 16 ` + -ProductPatchVersion 0 ` + -ProductBuildNumber 8 ` + -ExeProductVersion "17.0.16.8" ` + -Arch "x64" ` + -JVM "hotspot" ` + -ProductCategory "jdk" +``` + +### Sign EXE file +Here you can either sign during compilation (recommended) or after compilation. To sign during compilation, you will need to pass in a formatted CLI command as the value to the `SigningCommand` variable when running `CreateExe.ps1`. Signing during compilation is recommended as it is the only way to ensure that the uninstall script (packaged within the EXE) is also signed by you. For more information on how to format the input to `SigningCommand`, see: https://jrsoftware.org/ishelp/index.php?topic=setup_signtool + +While not recommended, you can choose not to use the `SigningCommand` input and instead manually sign the resulting EXE file after compilation is completed. + +> [!WARNING] +> If you do not use the `SigningCommand` to sign during compilation, then the uninstall script (packaged within your EXE) will not be signed. In this case, if the user attempts to uninstall your OpenJDK, they will be warned that they are about to run a program from an unknown vendor. + + +Example input to `SigningCommand`: +```powershell +-SigningCommand signtool.exe sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f +``` + +# Using EXE files + +## Install using EXE file +To install via UI, simply double-click on the EXE installer file and follow the instructions in the setup wizard. + +To install via CLI, follow these steps: +1. Choose the features you want to install from the following table: + + | Feature | Description | + |-------------------------|----------------------------------------------------------| + | `FeatureEnvironment` | Update the `PATH` environment variable. (DEFAULT) | + | `FeatureJarFileRunWith` | Associate *.jar* files with Java applications. (DEFAULT) | + | `FeatureJavaHome` | Update the `JAVA_HOME` environment variable. | + | `FeatureOracleJavaSoft` | Updates registry keys `HKLM\SOFTWARE\JavaSoft\`. | + + > [!NOTE] + > You can use `FeatureOracleJavaSoft` to prevent Oracle Java from launching from PATH when the Microsoft Build of OpenJDK is uninstalled. Reinstall Oracle Java if you need to restore the Oracle registry keys. + +2. Run the EXE file from the command line. Use the selected features, as shown in the following example. + + ```cmd + .\.exe /SILENT /SUPPRESSMSGBOXES /ALLUSERS /TASKS="FeatureEnvironment,FeatureJarFileRunWith" /DIR="C:\Program Files\Microsoft\" + ``` + + > [!NOTE] + > If installing for only the current user, use the flag `/CURRENTUSER` instead of `/ALLUSERS`. + > + > To suppress the progress bar screen of the installation, use the flag `/VERYSILENT` instead of `/SILENT`. + > + > The `/DIR` flag is optional. If omitted, the default installation directory is used based on the installation mode: `/ALLUSERS` or `/CURRENTUSER`. + +## Uninstall EXE file +To uninstall the OpenJDK, open your Windows settings and navigate to `Apps > Installed Apps`. Search for the name of the OpenJDK that was installed. Once located, click on the `...` on the right-hand side of the entry and select `Uninstall` from the dropdown menu. A UI uninstaller will appear; follow the remaining instructions. From d6cc7b78f9f0277f79aa7bbd520962428106c99a Mon Sep 17 00:00:00 2001 From: jmjaffe37 <111303274+jmjaffe37@users.noreply.github.com> Date: Tue, 16 Dec 2025 10:18:41 -0600 Subject: [PATCH 48/49] Update inno_setup/inno_scripts/uninstall_handler.iss Co-authored-by: Martijn Verburg --- inno_setup/inno_scripts/uninstall_handler.iss | 1 - 1 file changed, 1 deletion(-) diff --git a/inno_setup/inno_scripts/uninstall_handler.iss b/inno_setup/inno_scripts/uninstall_handler.iss index 7d9ee0395..4fd86942f 100755 --- a/inno_setup/inno_scripts/uninstall_handler.iss +++ b/inno_setup/inno_scripts/uninstall_handler.iss @@ -99,7 +99,6 @@ begin end; - // This function defines uninstallation logic at each step of the uninstallation process: // usUninstall - just before the actual uninstallation starts // usPostUninstall - just after the actual uninstallation finishes From 0005f207ea5efbaacd0b4db2b1bed5ffdc585e41 Mon Sep 17 00:00:00 2001 From: jmjaffe37 Date: Tue, 13 Jan 2026 13:50:30 -0800 Subject: [PATCH 49/49] Removed blank space --- inno_setup/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inno_setup/README.md b/inno_setup/README.md index 8de54a2d4..9e877c4a3 100644 --- a/inno_setup/README.md +++ b/inno_setup/README.md @@ -1,5 +1,5 @@ # Introduction -This tool is designed to create EXE files which are modern and accessibility-friendly. This EXE format provides a reliable and user-friendly installation experience, including a graphical installer interface that achieves the highest standards for accessibility. When installed, the folder `jdk-${ExeProductVersion}-${JVM}` is placed at `C:\Program Files\${Vendor}\` (for machine-wide installs), or `C:\Users\${env:USERNAME}\AppData\Local\Programs\${Vendor}\` (for user installs). +This tool is designed to create EXE files which are modern and accessibility-friendly. This EXE format provides a reliable and user-friendly installation experience, including a graphical installer interface that achieves the highest standards for accessibility. When installed, the folder `jdk-${ExeProductVersion}-${JVM}` is placed at `C:\Program Files\${Vendor}\` (for machine-wide installs), or `C:\Users\${env:USERNAME}\AppData\Local\Programs\${Vendor}\` (for user installs). # How to create EXE files