; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "@PROJECT_FULL_NAME@" #define MyAppVersion "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@" #define MyAppPublisher "Aitum" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) ; app Information AppId={{7E8814F2-03EE-4E2E-8062-A9A184EC0618}} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppMutex={#MyAppName} VersionInfoVersion={#MyAppVersion} VersionInfoCompany={#MyAppPublisher} VersionInfoDescription={#MyAppName} Setup ; Compression Compression=lzma2/ultra64 SolidCompression=yes LZMAAlgorithm=1 ; Other Information DefaultDirName={code:GetDirName} DefaultGroupName={#MyAppName} AllowNoIcons=yes OutputDir="package" OutputBaseFilename=@PROJECT_NAME@-installer DirExistsWarning=no DisableDirPage=no ; Wizard Information WizardStyle=modern WizardResizable=yes SetupIconFile="media/icon.ico" [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Files] Source: "package/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "msvc-redist-helper.exe"; DestDir: "{app}"; DestName: "msvc-redist-helper.exe"; Flags: ignoreversion dontcopy noencryption ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" [Code] function GetDirName(Value: string): string; var InstallPath: string; begin // initialize default path, which will be returned when the following registry // key queries fail due to missing keys or for some different reason Result := ExpandConstant('{pf}\obs-studio'); // query the first registry value; if this succeeds, return the obtained value if RegQueryStringValue(HKLM32, 'SOFTWARE\OBS Studio', '', InstallPath) then Result := InstallPath end; ///////////////////////////////////////////////////////////////////// function GetUninstallString(): String; var sUnInstPath: String; sUnInstallString: String; begin sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1'); sUnInstallString := ''; if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); Result := sUnInstallString; end; ///////////////////////////////////////////////////////////////////// function IsUpgrade(): Boolean; begin Result := (GetUninstallString() <> ''); end; ///////////////////////////////////////////////////////////////////// function UnInstallOldVersion(): Integer; var sUnInstallString: String; iResultCode: Integer; begin // Return Values: // 1 - uninstall string is empty // 2 - error executing the UnInstallString // 3 - successfully executed the UnInstallString // default return value Result := 0; // get the uninstall string of the old app sUnInstallString := GetUninstallString(); if sUnInstallString <> '' then begin sUnInstallString := RemoveQuotes(sUnInstallString); if Exec(sUnInstallString, '/VERYSILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then Result := 3 else Result := 2; end else Result := 1; end; ///////////////////////////////////////////////////////////////////// procedure CurStepChanged(CurStep: TSetupStep); var ResultCode: Integer; begin if (CurStep=ssInstall) then begin if (IsUpgrade()) then begin UnInstallOldVersion(); end; end; if (CurStep=ssPostInstall) then begin ExtractTemporaryFile('msvc-redist-helper.exe'); Exec(ExpandConstant('{tmp}\msvc-redist-helper.exe'), '2019', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); end; end; ///////////////////////////////////////////////////////////////////// function NextButtonClick(PageId: Integer): Boolean; var ObsFileName: string; ObsMS, ObsLS: Cardinal; ObsMajorVersion, ObsMinorVersion: Cardinal; begin Result := True; if not (PageId = wpSelectDir) then begin exit; end; ObsFileName := ExpandConstant('{app}\bin\64bit\obs64.exe'); if not FileExists(ObsFileName) then begin MsgBox('OBS Studio (bin\64bit\obs64.exe) does not seem to be installed in that folder. Please select the correct folder.', mbError, MB_OK); Result := False; exit; end; Result := GetVersionNumbers(ObsFileName, ObsMS, ObsLS); if not Result then begin MsgBox('Failed to read version from OBS Studio (bin\64bit\obs64.exe).', mbError, MB_OK); Result := False; exit; end; { shift 16 bits to the right to get major version } ObsMajorVersion := ObsMS shr 16; { select only low 16 bits } ObsMinorVersion := ObsMS and $FFFF; if ObsMajorVersion < 29 then begin MsgBox('Version of OBS Studio (bin\64bit\obs64.exe) is lower than the version 29 required.', mbError, MB_OK); Result := False; exit; end; end;