#define MyAppName "@CMAKE_PROJECT_NAME@" #define MyAppVersion "@CMAKE_PROJECT_VERSION@" #define MyAppPublisher "@PLUGIN_AUTHOR@" #define MyAppURL "@PLUGIN_WEBSITE@" #define MyAppId "@UUID_APP@" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{{#MyAppId}} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={code:GetDirName} DefaultGroupName={#MyAppName} OutputBaseFilename={#MyAppName}-{#MyAppVersion}-Windows-Installer Compression=lzma SolidCompression=yes DirExistsWarning=no UsePreviousAppDir=no SetupIconFile=installer.ico UninstallDisplayIcon={code:GetUninstallIconPath} DisableDirPage=no [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Files] ; Recommended layout - used when installing to %ProgramData%\obs-studio\plugins\ Source: "..\release\Package\recommended\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsRecommendedLayout ; Legacy layout - used when installing to the OBS installation directory Source: "..\release\Package\legacy\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsLegacyLayout Source: "..\LICENSE"; Flags: dontcopy ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" [Code] procedure InitializeWizard(); var GPLText: AnsiString; Page: TOutputMsgMemoWizardPage; begin ExtractTemporaryFile('LICENSE'); LoadStringFromFile(ExpandConstant('{tmp}\LICENSE'), GPLText); Page := CreateOutputMsgMemoPage(wpWelcome, 'License Information', 'Please review the license terms before installing {#MyAppName}', 'Press Page Down to see the rest of the agreement. Once you are aware of your rights, click Next to continue.', String(GPLText) ); end; // Returns true when the selected install directory is under %ProgramData%, // meaning the recommended plugin layout should be used. function IsRecommendedLayout(): Boolean; begin Result := Pos(LowerCase(ExpandConstant('{commonappdata}')), LowerCase(WizardDirValue())) = 1; end; function IsLegacyLayout(): Boolean; begin Result := not IsRecommendedLayout(); end; function GetUninstallIconPath(Param: string): string; begin if IsRecommendedLayout() then Result := ExpandConstant('{app}\advanced-scene-switcher\data\res\images\logo.ico') else Result := ExpandConstant('{app}\data\obs-plugins\advanced-scene-switcher\res\images\logo.ico'); end; function GetDirName(Value: string): string; var PrevPath: string; UninstallKey: string; begin Result := ExpandConstant('{commonappdata}\obs-studio\plugins'); UninstallKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + '{' + '{#MyAppId}' + '}_is1'; if RegQueryStringValue(HKLM, UninstallKey, 'InstallLocation', PrevPath) and (PrevPath <> '') then Result := PrevPath; end; // Remove files placed by the legacy installer (obs-plugins/64bit and // data/obs-plugins layout) so the plugin is not loaded twice by OBS. // Only runs when upgrading from a legacy location to the recommended one. procedure RemoveLegacyFiles(); var OldInstallPath: string; UninstallKey: string; begin if not IsRecommendedLayout() then Exit; UninstallKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + '{' + '{#MyAppId}' + '}_is1'; if not RegQueryStringValue(HKLM, UninstallKey, 'InstallLocation', OldInstallPath) then Exit; // Skip if the previous install was already in the recommended location if Pos(LowerCase(ExpandConstant('{commonappdata}')), LowerCase(OldInstallPath)) = 1 then Exit; DeleteFile(OldInstallPath + '\obs-plugins\64bit\advanced-scene-switcher.dll'); DeleteFile(OldInstallPath + '\obs-plugins\64bit\advanced-scene-switcher.pdb'); DeleteFile(OldInstallPath + '\obs-plugins\64bit\advanced-scene-switcher-lib.dll'); DeleteFile(OldInstallPath + '\obs-plugins\64bit\advanced-scene-switcher-lib.pdb'); DelTree(OldInstallPath + '\obs-plugins\64bit\advanced-scene-switcher-plugins', True, True, True); DelTree(OldInstallPath + '\data\obs-plugins\advanced-scene-switcher', True, True, True); end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then RemoveLegacyFiles(); end;