Make nsis match better

This commit is contained in:
K4sum1 2025-03-24 18:11:32 -07:00
commit b43a601654
5 changed files with 42 additions and 100 deletions

View file

@ -1073,51 +1073,22 @@ Function .onInit
Quit Quit
${EndUnless} ${EndUnless}
SetRegView 64 ; SSE2 support
!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
${If} "$R7" == "0" ${If} "$R7" == "0"
MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2
ExecShell "open" "${URLSystemRequirements}" ExecShell "open" "${URLSystemRequirements}"
Quit Quit
${EndIf} ${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)" ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)"
; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be

View file

@ -166,56 +166,6 @@ UninstPage custom un.preConfirm
; Use the default dialog for IDD_VERIFY for a simple Banner ; Use the default dialog for IDD_VERIFY for a simple Banner
ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe" 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 # Install Sections
; Empty section required for the installer to compile as an uninstaller ; Empty section required for the installer to compile as an uninstaller

View file

@ -34,6 +34,7 @@ RequestExecutionLevel user
Var TmpVal Var TmpVal
Var InstallType Var InstallType
Var AddStartMenuSC Var AddStartMenuSC
Var AddTaskbarSC
Var AddQuickLaunchSC Var AddQuickLaunchSC
Var AddDesktopSC Var AddDesktopSC
Var InstallMaintenanceService Var InstallMaintenanceService
@ -92,6 +93,7 @@ VIAddVersionKey "OriginalFilename" "setup.exe"
!insertmacro InitHashAppModelId !insertmacro InitHashAppModelId
!insertmacro IsHandlerForInstallDir !insertmacro IsHandlerForInstallDir
!insertmacro IsPinnedToTaskBar !insertmacro IsPinnedToTaskBar
!insertmacro IsUserAdmin
!insertmacro LogDesktopShortcut !insertmacro LogDesktopShortcut
!insertmacro LogQuickLaunchShortcut !insertmacro LogQuickLaunchShortcut
!insertmacro LogStartMenuShortcut !insertmacro LogStartMenuShortcut
@ -399,10 +401,12 @@ Section "-Application" APP_IDX
; If we are writing to HKLM and create either the desktop or start menu ; If we are writing to HKLM and create either the desktop or start menu
; shortcuts set IconsVisible to 1 otherwise to 0. ; shortcuts set IconsVisible to 1 otherwise to 0.
; Taskbar shortcuts imply having a start menu shortcut.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9 ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1 ${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1 ${OrIf} $AddStartMenuSC == 1
${OrIf} $AddTaskbarSC == 1
WriteRegDWORD HKLM "$0" "IconsVisible" 1 WriteRegDWORD HKLM "$0" "IconsVisible" 1
${Else} ${Else}
WriteRegDWORD HKLM "$0" "IconsVisible" 0 WriteRegDWORD HKLM "$0" "IconsVisible" 0
@ -416,10 +420,12 @@ Section "-Application" APP_IDX
; If we create either the desktop or start menu shortcuts, then ; If we create either the desktop or start menu shortcuts, then
; set IconsVisible to 1 otherwise to 0. ; set IconsVisible to 1 otherwise to 0.
; Taskbar shortcuts imply having a start menu shortcut.
${StrFilter} "${FileMainEXE}" "+" "" "" $R9 ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
${If} $AddDesktopSC == 1 ${If} $AddDesktopSC == 1
${OrIf} $AddStartMenuSC == 1 ${OrIf} $AddStartMenuSC == 1
${OrIf} $AddTaskbarSC == 1
WriteRegDWORD HKCU "$0" "IconsVisible" 1 WriteRegDWORD HKCU "$0" "IconsVisible" 1
${Else} ${Else}
WriteRegDWORD HKCU "$0" "IconsVisible" 0 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 ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be
; removed after we require NSIS 3.0a2 or greater. ; removed after we require NSIS 3.0a2 or greater.
!ifndef NSIS_PACKEDVERSION !ifndef NSIS_PACKEDVERSION
System::Call 'user32::SetProcessDPIAware()' ${If} ${AtLeastWinVista}
System::Call 'user32::SetProcessDPIAware()'
${EndIf}
!endif !endif
!insertmacro InitInstallOptionsFile "options.ini" !insertmacro InitInstallOptionsFile "options.ini"

View file

@ -322,9 +322,11 @@
WriteRegStr SHCTX "$0\.xhtml" "" "PaleMoonHTML" WriteRegStr SHCTX "$0\.xhtml" "" "PaleMoonHTML"
${EndIf} ${EndIf}
${AddAssociationIfNoneExist} ".pdf"
${AddAssociationIfNoneExist} ".oga" ${AddAssociationIfNoneExist} ".oga"
${AddAssociationIfNoneExist} ".ogg" ${AddAssociationIfNoneExist} ".ogg"
${AddAssociationIfNoneExist} ".ogv" ${AddAssociationIfNoneExist} ".ogv"
${AddAssociationIfNoneExist} ".pdf"
${AddAssociationIfNoneExist} ".webm" ${AddAssociationIfNoneExist} ".webm"
; An empty string is used for the 5th param because PaleMoonHTML is not a ; An empty string is used for the 5th param because PaleMoonHTML is not a
@ -620,9 +622,11 @@
${EndIf} ${EndIf}
; Remove possibly badly associated file types ; Remove possibly badly associated file types
${FixBadFileAssociation} ".pdf"
${FixBadFileAssociation} ".oga" ${FixBadFileAssociation} ".oga"
${FixBadFileAssociation} ".ogg" ${FixBadFileAssociation} ".ogg"
${FixBadFileAssociation} ".ogv" ${FixBadFileAssociation} ".ogv"
${FixBadFileAssociation} ".pdf"
${FixBadFileAssociation} ".webm" ${FixBadFileAssociation} ".webm"
!macroend !macroend
!define FixClassKeys "!insertmacro FixClassKeys" !define FixClassKeys "!insertmacro FixClassKeys"
@ -840,17 +844,24 @@
ClearErrors ClearErrors
WriteIniStr "$0" "TASKBAR" "Migrated" "true" WriteIniStr "$0" "TASKBAR" "Migrated" "true"
${If} ${AtLeastWin7} ${If} ${AtLeastWin7}
; No need to check the default on Win8 and later ; If we didn't run the stub installer, AddTaskbarSC will be empty.
${If} ${AtMostWin2008R2} ; We determine whether to pin based on whether we're the default
; Check if the Pale Moon is the http handler for this user ; browser, or if we're on win8 or later, we always pin.
SetShellVarContext current ; Set SHCTX to the current user ${If} $AddTaskbarSC == ""
${IsHandlerForInstallDir} "http" $R9 ; No need to check the default on Win8 and later
${If} $TmpVal == "HKLM" ${If} ${AtMostWin2008R2}
SetShellVarContext all ; Set SHCTX to all users ; 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}
${EndIf} ${If} "$R9" == "true"
${If} "$R9" == "true" ${OrIf} ${AtLeastWin8}
${OrIf} ${AtLeastWin8} ${PinToTaskBar}
${EndIf}
${ElseIf} $AddTaskbarSC == "1"
${PinToTaskBar} ${PinToTaskBar}
${EndIf} ${EndIf}
${EndIf} ${EndIf}

View file

@ -75,6 +75,7 @@ VIAddVersionKey "OriginalFilename" "helper.exe"
!insertmacro InitHashAppModelId !insertmacro InitHashAppModelId
!insertmacro IsHandlerForInstallDir !insertmacro IsHandlerForInstallDir
!insertmacro IsPinnedToTaskBar !insertmacro IsPinnedToTaskBar
!insertmacro IsUserAdmin
!insertmacro LogDesktopShortcut !insertmacro LogDesktopShortcut
!insertmacro LogQuickLaunchShortcut !insertmacro LogQuickLaunchShortcut
!insertmacro LogStartMenuShortcut !insertmacro LogStartMenuShortcut
@ -245,6 +246,7 @@ Section "Uninstall"
${un.RegCleanFileHandler} ".oga" "PaleMoonHTML" ${un.RegCleanFileHandler} ".oga" "PaleMoonHTML"
${un.RegCleanFileHandler} ".ogg" "PaleMoonHTML" ${un.RegCleanFileHandler} ".ogg" "PaleMoonHTML"
${un.RegCleanFileHandler} ".ogv" "PaleMoonHTML" ${un.RegCleanFileHandler} ".ogv" "PaleMoonHTML"
${un.RegCleanFileHandler} ".pdf" "PaleMoonHTML"
${un.RegCleanFileHandler} ".webm" "PaleMoonHTML" ${un.RegCleanFileHandler} ".webm" "PaleMoonHTML"
${EndIf} ${EndIf}