From b43a601654da15469c205c04c5ff235437efaf87 Mon Sep 17 00:00:00 2001 From: K4sum1 Date: Mon, 24 Mar 2025 18:11:32 -0700 Subject: [PATCH] Make nsis match better --- .../installer/windows/nsis/installer.nsi | 49 ++++-------------- .../installer/windows/nsis/uninstaller.nsi | 50 ------------------- .../installer/windows/nsis/installer.nsi | 10 +++- .../installer/windows/nsis/shared.nsh | 31 ++++++++---- .../installer/windows/nsis/uninstaller.nsi | 2 + 5 files changed, 42 insertions(+), 100 deletions(-) diff --git a/application/basilisk/installer/windows/nsis/installer.nsi b/application/basilisk/installer/windows/nsis/installer.nsi index dc8742c1bb..6b68b4e2d3 100644 --- a/application/basilisk/installer/windows/nsis/installer.nsi +++ b/application/basilisk/installer/windows/nsis/installer.nsi @@ -1073,51 +1073,22 @@ Function .onInit Quit ${EndUnless} - SetRegView 64 -!else - StrCpy $R8 "0" - ${If} ${AtMostWin2000} - StrCpy $R8 "1" - ${EndIf} - - ${If} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 1 - StrCpy $R8 "1" - ${EndIf} - - ${If} $R8 == "1" - ; XXX-rstrong - some systems failed the AtLeastWin2000 test that we - ; used to use for an unknown reason and likely fail the AtMostWin2000 - ; and possibly the IsWinXP test as well. To work around this also - ; check if the Windows NT registry Key exists and if it does if the - ; first char in CurrentVersion is equal to 3 (Windows NT 3.5 and - ; 3.5.1), 4 (Windows NT 4), or 5 (Windows 2000 and Windows XP). - StrCpy $R8 "" - ClearErrors - ReadRegStr $R8 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion" - StrCpy $R8 "$R8" 1 - ${If} ${Errors} - ${OrIf} "$R8" == "3" - ${OrIf} "$R8" == "4" - ${OrIf} "$R8" == "5" - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - ${EndUnless} -!endif - + ; SSE2 support ${If} "$R7" == "0" MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 ExecShell "open" "${URLSystemRequirements}" Quit ${EndIf} +!ifdef HAVE_64BIT_BUILD + ${Unless} ${RunningX64} + MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_OSVER_MSG)" IDCANCEL +2 + ExecShell "open" "${URLSystemRequirements}" + Quit + ${EndUnless} + SetRegView 64 +!endif + ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be diff --git a/application/basilisk/installer/windows/nsis/uninstaller.nsi b/application/basilisk/installer/windows/nsis/uninstaller.nsi index 7f577d27f3..b7d85d6e34 100644 --- a/application/basilisk/installer/windows/nsis/uninstaller.nsi +++ b/application/basilisk/installer/windows/nsis/uninstaller.nsi @@ -166,56 +166,6 @@ UninstPage custom un.preConfirm ; Use the default dialog for IDD_VERIFY for a simple Banner ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe" -################################################################################ -# Helper Functions - -; This function is used to uninstall the maintenance service if the -; application currently being uninstalled is the last application to use the -; maintenance service. -Function un.UninstallServiceIfNotUsed - ; $0 will store if a subkey exists - ; $1 will store the first subkey if it exists or an empty string if it doesn't - ; Backup the old values - Push $0 - Push $1 - - ; The maintenance service always uses the 64-bit registry on x64 systems - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - - ; Figure out the number of subkeys - StrCpy $0 0 - ${Do} - EnumRegKey $1 HKLM "Software\Mozilla\MaintenanceService" $0 - ${If} "$1" == "" - ${ExitDo} - ${EndIf} - IntOp $0 $0 + 1 - ${Loop} - - ; Restore back the registry view - ${If} ${RunningX64} - SetRegView lastUsed - ${EndIf} - ${If} $0 == 0 - ; Get the path of the maintenance service uninstaller - ReadRegStr $1 HKLM ${MaintUninstallKey} "UninstallString" - - ; If the uninstall string does not exist, skip executing it - StrCmp $1 "" doneUninstall - - ; $1 is already a quoted string pointing to the install path - ; so we're already protected against paths with spaces - nsExec::Exec "$1 /S" -doneUninstall: - ${EndIf} - - ; Restore the old value of $1 and $0 - Pop $1 - Pop $0 -FunctionEnd - ################################################################################ # Install Sections ; Empty section required for the installer to compile as an uninstaller diff --git a/application/palemoon/installer/windows/nsis/installer.nsi b/application/palemoon/installer/windows/nsis/installer.nsi index 072081e79e..88310f4c7a 100644 --- a/application/palemoon/installer/windows/nsis/installer.nsi +++ b/application/palemoon/installer/windows/nsis/installer.nsi @@ -34,6 +34,7 @@ RequestExecutionLevel user Var TmpVal Var InstallType Var AddStartMenuSC +Var AddTaskbarSC Var AddQuickLaunchSC Var AddDesktopSC Var InstallMaintenanceService @@ -92,6 +93,7 @@ VIAddVersionKey "OriginalFilename" "setup.exe" !insertmacro InitHashAppModelId !insertmacro IsHandlerForInstallDir !insertmacro IsPinnedToTaskBar +!insertmacro IsUserAdmin !insertmacro LogDesktopShortcut !insertmacro LogQuickLaunchShortcut !insertmacro LogStartMenuShortcut @@ -399,10 +401,12 @@ Section "-Application" APP_IDX ; If we are writing to HKLM and create either the desktop or start menu ; shortcuts set IconsVisible to 1 otherwise to 0. + ; Taskbar shortcuts imply having a start menu shortcut. ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" ${If} $AddDesktopSC == 1 ${OrIf} $AddStartMenuSC == 1 + ${OrIf} $AddTaskbarSC == 1 WriteRegDWORD HKLM "$0" "IconsVisible" 1 ${Else} WriteRegDWORD HKLM "$0" "IconsVisible" 0 @@ -416,10 +420,12 @@ Section "-Application" APP_IDX ; If we create either the desktop or start menu shortcuts, then ; set IconsVisible to 1 otherwise to 0. + ; Taskbar shortcuts imply having a start menu shortcut. ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" ${If} $AddDesktopSC == 1 ${OrIf} $AddStartMenuSC == 1 + ${OrIf} $AddTaskbarSC == 1 WriteRegDWORD HKCU "$0" "IconsVisible" 1 ${Else} WriteRegDWORD HKCU "$0" "IconsVisible" 0 @@ -1088,7 +1094,9 @@ Function .onInit ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be ; removed after we require NSIS 3.0a2 or greater. !ifndef NSIS_PACKEDVERSION - System::Call 'user32::SetProcessDPIAware()' + ${If} ${AtLeastWinVista} + System::Call 'user32::SetProcessDPIAware()' + ${EndIf} !endif !insertmacro InitInstallOptionsFile "options.ini" diff --git a/application/palemoon/installer/windows/nsis/shared.nsh b/application/palemoon/installer/windows/nsis/shared.nsh index 385a411a3c..cddfb74c0e 100644 --- a/application/palemoon/installer/windows/nsis/shared.nsh +++ b/application/palemoon/installer/windows/nsis/shared.nsh @@ -322,9 +322,11 @@ WriteRegStr SHCTX "$0\.xhtml" "" "PaleMoonHTML" ${EndIf} + ${AddAssociationIfNoneExist} ".pdf" ${AddAssociationIfNoneExist} ".oga" ${AddAssociationIfNoneExist} ".ogg" ${AddAssociationIfNoneExist} ".ogv" + ${AddAssociationIfNoneExist} ".pdf" ${AddAssociationIfNoneExist} ".webm" ; An empty string is used for the 5th param because PaleMoonHTML is not a @@ -620,9 +622,11 @@ ${EndIf} ; Remove possibly badly associated file types + ${FixBadFileAssociation} ".pdf" ${FixBadFileAssociation} ".oga" ${FixBadFileAssociation} ".ogg" ${FixBadFileAssociation} ".ogv" + ${FixBadFileAssociation} ".pdf" ${FixBadFileAssociation} ".webm" !macroend !define FixClassKeys "!insertmacro FixClassKeys" @@ -840,17 +844,24 @@ ClearErrors WriteIniStr "$0" "TASKBAR" "Migrated" "true" ${If} ${AtLeastWin7} - ; No need to check the default on Win8 and later - ${If} ${AtMostWin2008R2} - ; Check if the Pale Moon is the http handler for this user - SetShellVarContext current ; Set SHCTX to the current user - ${IsHandlerForInstallDir} "http" $R9 - ${If} $TmpVal == "HKLM" - SetShellVarContext all ; Set SHCTX to all users + ; If we didn't run the stub installer, AddTaskbarSC will be empty. + ; We determine whether to pin based on whether we're the default + ; browser, or if we're on win8 or later, we always pin. + ${If} $AddTaskbarSC == "" + ; No need to check the default on Win8 and later + ${If} ${AtMostWin2008R2} + ; Check if the Basilisk is the http handler for this user + SetShellVarContext current ; Set SHCTX to the current user + ${IsHandlerForInstallDir} "http" $R9 + ${If} $TmpVal == "HKLM" + SetShellVarContext all ; Set SHCTX to all users + ${EndIf} ${EndIf} - ${EndIf} - ${If} "$R9" == "true" - ${OrIf} ${AtLeastWin8} + ${If} "$R9" == "true" + ${OrIf} ${AtLeastWin8} + ${PinToTaskBar} + ${EndIf} + ${ElseIf} $AddTaskbarSC == "1" ${PinToTaskBar} ${EndIf} ${EndIf} diff --git a/application/palemoon/installer/windows/nsis/uninstaller.nsi b/application/palemoon/installer/windows/nsis/uninstaller.nsi index bee091d6fb..ff14e07242 100644 --- a/application/palemoon/installer/windows/nsis/uninstaller.nsi +++ b/application/palemoon/installer/windows/nsis/uninstaller.nsi @@ -75,6 +75,7 @@ VIAddVersionKey "OriginalFilename" "helper.exe" !insertmacro InitHashAppModelId !insertmacro IsHandlerForInstallDir !insertmacro IsPinnedToTaskBar +!insertmacro IsUserAdmin !insertmacro LogDesktopShortcut !insertmacro LogQuickLaunchShortcut !insertmacro LogStartMenuShortcut @@ -245,6 +246,7 @@ Section "Uninstall" ${un.RegCleanFileHandler} ".oga" "PaleMoonHTML" ${un.RegCleanFileHandler} ".ogg" "PaleMoonHTML" ${un.RegCleanFileHandler} ".ogv" "PaleMoonHTML" + ${un.RegCleanFileHandler} ".pdf" "PaleMoonHTML" ${un.RegCleanFileHandler} ".webm" "PaleMoonHTML" ${EndIf}