125 lines
5.0 KiB
Plaintext
125 lines
5.0 KiB
Plaintext
#define DIR GetEnv('windows_package_src')
|
|
#define BASE GetEnv('BASE')
|
|
#define VERSION GetEnv('VERSION')
|
|
[Setup]
|
|
AppName=Renode
|
|
AppVersion={#VERSION}
|
|
AppId=Renode
|
|
AppReadmeFile=https://renode.readthedocs.io/en/latest/
|
|
; Publisher Information
|
|
AppPublisher=Antmicro
|
|
AppPublisherURL=https://antmicro.com/
|
|
AppCopyright=Copyright (C) 2010-2025 Antmicro
|
|
; Architecture settings
|
|
ArchitecturesAllowed=x64compatible
|
|
ArchitecturesInstallIn64BitMode=x64compatible
|
|
OutputBaseFilename=renode-{#version}.setup
|
|
; Default install directory
|
|
DefaultDirName={autopf}\Renode
|
|
DefaultGroupName=Renode
|
|
; Compression settings
|
|
Compression=lzma
|
|
SolidCompression=yes
|
|
; Appearance
|
|
WizardStyle=modern
|
|
SetupIconFile=lib\resources\images\windows_setup\renode.ico
|
|
UninstallDisplayIcon={app}\renode.exe
|
|
WizardImageFile=lib\resources\images\windows_setup\wizard_image.bmp
|
|
WizardSmallImageFile=lib\resources\images\windows_setup\wizard_image_small.bmp
|
|
; Allows the user to skip creating a start menu shortcut
|
|
AllowNoIcons=yes
|
|
; Tells Windows that enviroment variables such as PATH should be reloaded after installation
|
|
ChangesEnvironment=yes
|
|
; Input and output directories for the build
|
|
; SourceDir expands to the renode directory, and is used as the working dir for Inno Setup
|
|
SourceDir="..\{#BASE}"
|
|
OutputDir="output\packages"
|
|
|
|
[Files]
|
|
; Since not all of our files gets tagged with incrementing versions we have to use the ignoreversion flag to ensure update installs work as they should
|
|
Source: "tools\packaging\{#DIR}\*"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion
|
|
|
|
[Tasks]
|
|
Name: "desktopicon"; Description: "Create a Desktop Icon"; Flags: unchecked
|
|
Name: "addtopath"; Description: "Add Renode to PATH";
|
|
|
|
; Despite the name, this section creates shortcuts
|
|
[Icons]
|
|
Name: "{group}\Renode"; Filename: "{app}\renode.exe"; WorkingDir: "{app}"
|
|
Name: "{commondesktop}\Renode"; Filename: "{app}\renode.exe"; WorkingDir: "{app}"; Tasks: desktopicon
|
|
|
|
[Registry]
|
|
#define EnvironmentRootKey "HKLM"
|
|
#define EnvironmentKey "System\CurrentControlSet\Control\Session Manager\Environment"
|
|
Root: {#EnvironmentRootKey}; Subkey: "{#EnvironmentKey}"; ValueType: expandsz; ValueName: "Path"; ValueData: "{code:AddToPath|{app}}"; Tasks: addtopath; Check: NeedsAddToPath(ExpandConstant('{app}'))
|
|
|
|
[Code]
|
|
// Check for version using the old installer before installation
|
|
function InitializeSetup: Boolean;
|
|
var
|
|
UninstallKeys: TArrayOfString;
|
|
I: Integer;
|
|
ResultStr: String;
|
|
ResultCode: Integer;
|
|
begin
|
|
if IsMsiProductInstalled('{7e549c3f-a15a-4101-8071-9d52a16a28f6}', PackVersionComponents(0,0,0,0)) then
|
|
begin
|
|
case SuppressibleTaskDialogMsgBox(ExpandConstant('{cm:OldRenode} '), 'A version of Renode installed with the old installer has been detected. It will be uninstalled automatically before starting the setup', mbConfirmation, MB_OKCANCEL, [], 0, IDOK) of
|
|
IDOK:
|
|
begin
|
|
if RegGetSubkeyNames(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall', UninstallKeys) then
|
|
begin
|
|
for I := 0 to GetArrayLength(UninstallKeys) - 1 do
|
|
begin
|
|
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\' + UninstallKeys[i], 'DisplayName', ResultStr) then
|
|
begin
|
|
if CompareText('Renode', ResultStr) = 0 then
|
|
begin
|
|
// We found the old renode installation
|
|
if Exec('MsiExec.exe', '/quiet /passive /X' + UninstallKeys[i], '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then
|
|
begin
|
|
SuppressibleMsgBox('Successfully uninstalled old Renode version', mbInformation, MB_OK, MB_OK);
|
|
end
|
|
else
|
|
RaiseException('Failed to uninstall the old Renode version. Please uninstall it manually and then re-run this setup');
|
|
end
|
|
end
|
|
end;
|
|
Result := True;
|
|
end
|
|
else
|
|
begin
|
|
Result := False;
|
|
end
|
|
end;
|
|
IDCANCEL: Result := False;
|
|
end;
|
|
end
|
|
else
|
|
Result := True;
|
|
end;
|
|
// Based on the add to path logic from the vscode installer
|
|
function NeedsAddToPath(Renode: string): boolean;
|
|
var
|
|
OrigPath: string;
|
|
begin
|
|
if not RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', OrigPath)
|
|
then begin
|
|
Result := True;
|
|
exit;
|
|
end;
|
|
Result := Pos(';' + Renode + ';', ';' + OrigPath + ';') = 0;
|
|
end;
|
|
|
|
function AddToPath(Renode: string): string;
|
|
var
|
|
OrigPath: string;
|
|
begin
|
|
RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', OrigPath)
|
|
|
|
if (Length(OrigPath) > 0) and (OrigPath[Length(OrigPath)] = ';') then
|
|
Result := OrigPath + Renode
|
|
else
|
|
Result := OrigPath + ';' + Renode
|
|
end;
|