mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-07-19 17:35:12 -05:00
Support both recommended and legacy layouts in Windows installer
Default to %ProgramData%\obs-studio\plugins\ on fresh installs. Restore the previously recorded install path on upgrades, so users who installed to a custom location are not silently moved.
This commit is contained in:
parent
f81010777b
commit
a53d21f81f
19
.github/scripts/Package-Windows.ps1
vendored
19
.github/scripts/Package-Windows.ps1
vendored
|
|
@ -129,7 +129,24 @@ function Package {
|
|||
Push-Location -Stack BuildTemp
|
||||
Ensure-Location -Path "${ProjectRoot}/release"
|
||||
Remove-Item -Path Package -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Copy-Item -Path ${Configuration} -Destination Package -Recurse
|
||||
|
||||
# Recommended layout (for %ProgramData%\obs-studio\plugins\)
|
||||
$PkgRec = "Package/recommended"
|
||||
New-Item -ItemType Directory -Force -Path $PkgRec | Out-Null
|
||||
Copy-Item -Path "${Configuration}/*" -Destination $PkgRec -Recurse -Force
|
||||
|
||||
# Legacy layout (for OBS installation directory)
|
||||
if ( Test-Path "${Configuration}/${ProductName}/bin/64bit" ) {
|
||||
$PkgLegBin = "Package/legacy/obs-plugins/64bit"
|
||||
New-Item -ItemType Directory -Force -Path $PkgLegBin | Out-Null
|
||||
Copy-Item -Path "${Configuration}/${ProductName}/bin/64bit/*" -Destination $PkgLegBin -Recurse -Force
|
||||
}
|
||||
if ( Test-Path "${Configuration}/${ProductName}/data" ) {
|
||||
$PkgLegData = "Package/legacy/data/obs-plugins/${ProductName}"
|
||||
New-Item -ItemType Directory -Force -Path $PkgLegData | Out-Null
|
||||
Copy-Item -Path "${Configuration}/${ProductName}/data/*" -Destination $PkgLegData -Recurse -Force
|
||||
}
|
||||
|
||||
Invoke-External iscc ${IsccFile} /O"${ProjectRoot}/release" /F"${OutputName}-Installer"
|
||||
Remove-Item -Path Package -Recurse
|
||||
Pop-Location -Stack BuildTemp
|
||||
|
|
|
|||
|
|
@ -23,14 +23,17 @@ SolidCompression=yes
|
|||
DirExistsWarning=no
|
||||
UsePreviousAppDir=no
|
||||
SetupIconFile=installer.ico
|
||||
UninstallDisplayIcon={app}\advanced-scene-switcher\data\res\images\logo.ico
|
||||
UninstallDisplayIcon={code:GetUninstallIconPath}
|
||||
DisableDirPage=no
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Files]
|
||||
Source: "..\release\Package\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; 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
|
||||
|
||||
|
|
@ -53,23 +56,54 @@ begin
|
|||
);
|
||||
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.
|
||||
// We read InstallLocation from our own previous uninstall entry, which is
|
||||
// the exact directory the old installer used regardless of OBS install path.
|
||||
// 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');
|
||||
|
|
@ -83,4 +117,3 @@ begin
|
|||
if CurStep = ssInstall then
|
||||
RemoveLegacyFiles();
|
||||
end;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user