From f08b2fee59ddb5525471cf993c76541413ca92d6 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 18:56:38 +0100 Subject: [PATCH 1/6] Beautify installer --- windows/installer.nsi | 70 +++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/windows/installer.nsi b/windows/installer.nsi index 7908983e6d..a9a56e9c25 100755 --- a/windows/installer.nsi +++ b/windows/installer.nsi @@ -76,6 +76,7 @@ Page Custom ASIOCheckInstalled ExitASIOInstalled ; Additional languages can be added below, see https://nsis.sourceforge.io/Examples/Modern%20UI/MultiLanguage.nsi !insertmacro MUI_LANGUAGE "English" ; The first language is the default ; !insertmacro MUI_LANGUAGE "Italian" + LangString DESKTOP_SET_SHORTCUT ${LANG_ENGLISH} \ "Create Desktop shortcut" LangString INVALID_FOLDER_MSG ${LANG_ENGLISH} \ @@ -130,6 +131,7 @@ Var Button ; Define user choices Var bInstallDtIcon + ; Installer !macro InstallApplication buildArch !define prefix "${DEPLOY_PATH}\${buildArch}" @@ -142,13 +144,15 @@ Var bInstallDtIcon ; Find target files !system 'cmd.exe /v /c "for /r "${prefix}" %f in (*.*) do \ @(set "_f=%f" && echo File "/oname=$INSTDIR\!_f:${prefix}\=!" "!_f!" >> "${files}")"' - ; to allow jumping in macros, NSIS reccomends to define unique IDs for labels https://nsis.sourceforge.io/Tutorial:_Using_labels_in_macro%27s + + ; to allow jumping in macros, NSIS recommends to define unique IDs for labels https://nsis.sourceforge.io/Tutorial:_Using_labels_in_macro%27s !define UniqueID ${__LINE__} InitPluginsDir ; see https://stackoverflow.com/questions/24595887/waiting-for-nsis-uninstaller-to-finish-in-nsis-installer-either-fails-or-the-uni IfFileExists "$INSTDIR\${UNINSTALL_EXE}" 0 continue_${UniqueID} - CreateDirectory "$pluginsdir\unold" ; Make sure plugins do not conflict with a old uninstaller + ; Make sure plugins do not conflict with a old uninstaller + CreateDirectory "$pluginsdir\unold" CopyFiles /SILENT /FILESONLY "$INSTDIR\${UNINSTALL_EXE}" "$pluginsdir\unold" ExecWait '"$pluginsdir\unold\${UNINSTALL_EXE}" /S _?=$INSTDIR' $0 @@ -167,6 +171,7 @@ Var bInstallDtIcon ; Add the redistribution license File "/oname=$INSTDIR\COPYING" "${ROOT_PATH}\COPYING" File "/oname=$INSTDIR\servericon.ico" "${SERVER_ICON}" + ; Cleanup !delfile "${files}" !undef files @@ -190,7 +195,7 @@ Var bInstallDtIcon ; Add the Start Menu shortcuts CreateDirectory "$SMPROGRAMS\${APP_NAME}" CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" - CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Server.lnk" "$INSTDIR\${APP_EXE}" "-s" "$INSTDIR\servericon.ico" + CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Server.lnk" "$INSTDIR\${APP_EXE}" "-s" "$INSTDIR\servericon.ico" CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Uninstall.lnk" "$INSTDIR\${UNINSTALL_EXE}" !macroend @@ -214,14 +219,18 @@ Function .onInit StrCpy $INSTDIR "$PROGRAMFILES32\${APP_NAME}" ${EndIf} + ; Install for all users SetShellVarContext all + ; get user choices (open program, dt icon,...) ReadRegStr $bInstallDtIcon HKLM "${APP_INSTALL_KEY}" "${APP_INSTALL_ICON}" IfErrors 0 +2 StrCpy $bInstallDtIcon "1" + ; Select installer language !insertmacro MUI_LANGDLL_DISPLAY + FunctionEnd ; Ensure Jamulus is installed into a new folder only, unless Jamulus is already installed there @@ -237,24 +246,31 @@ Function ValidateDestinationFolder FunctionEnd Section Install - ${If} ${RunningX64} + ${If} ${RunningX64} ; could be handled with disabled sections probably + ; check if old, wrongly installed Jamulus exists. See https://stackoverflow.com/questions/27839860/nsis-check-if-registry-key-value-exists#27841158 IfFileExists "$PROGRAMFILES32\Jamulus\Uninstall.exe" 0 continueinstall + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND)" /sd IDYES IDNO idontcare IDCANCEL quit goto removeold - idontcare: + + idontcare: ; Clicked no MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND_CONFIRM)" /sd IDNO IDYES continueinstall goto removeold - removeold: + + removeold: ; Remove it ExecWait '"$PROGRAMFILES32\Jamulus\Uninstall.exe" /S' $0 ${IfNot} $0 == 0 - MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(OLD_VER_REMOVE_FAILED)" /sd IDCANCEL IDOK continueinstall - goto quit + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(OLD_VER_REMOVE_FAILED)" /sd IDCANCEL IDOK continueinstall + goto quit ${EndIf} goto continueinstall + quit: Abort + continueinstall: + ; Install the main application !insertmacro InstallApplication x86_64 !insertmacro SetupShortcuts @@ -262,7 +278,9 @@ Section Install ; Install Microsoft Visual Studio redistributables and remove the installer afterwards ExecWait "$\"$INSTDIR\${VC_REDIST64_EXE}$\" /q /norestart" Delete "$INSTDIR\${VC_REDIST64_EXE}" + ${Else} + ; Install the main application !insertmacro InstallApplication x86 !insertmacro SetupShortcuts @@ -270,19 +288,23 @@ Section Install ; Install Microsoft Visual Studio redistributables and remove the installer afterwards ExecWait "$\"$INSTDIR\${VC_REDIST32_EXE}$\" /q /norestart" Delete "$INSTDIR\${VC_REDIST32_EXE}" + ${EndIf} + SectionEnd Function FinishPage.Show ; set the user choices if they were remembered + WriteRegStr HKLM "${APP_INSTALL_KEY}" "${APP_INSTALL_ICON}" "0" ; this will be overwritten if the box is checked ${If} $bInstallDtIcon == 1 ; Check the install desktop icon checkbox SendMessage $mui.FinishPage.Showreadme ${BM_SETCHECK} ${BST_CHECKED} 0 ${Else} SendMessage $mui.FinishPage.Showreadme ${BM_SETCHECK} ${BST_UNCHECKED} 0 ${EndIf} + ShowWindow $mui.FinishPage.Showreadme 1 -FunctionEnd +FunctionEnd Function AbortOnRunningApp !insertmacro _AbortOnRunningApp @@ -290,19 +312,19 @@ FunctionEnd Function createdesktopshortcut WriteRegStr HKLM "${APP_INSTALL_KEY}" "${APP_INSTALL_ICON}" "1" ; remember that icon should be installed next time - CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" + CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" FunctionEnd Function ASIOCheckInstalled - ; insert ASIO install page if no ASIO driver was found - ClearErrors - EnumRegKey $0 HKLM "SOFTWARE\ASIO" 0 - IfErrors 0 ASIOExists + ; insert ASIO install page if no ASIO driver was found + ClearErrors + EnumRegKey $0 HKLM "SOFTWARE\ASIO" 0 + + IfErrors 0 ASIOExists !insertmacro MUI_HEADER_TEXT "$(ASIO_DRIVER_HEADER)" "$(ASIO_DRIVER_SUB)" nsDialogs::Create 1018 Pop $Dialog - ${If} $Dialog == error Abort ${Endif} @@ -314,7 +336,9 @@ Function ASIOCheckInstalled ${NSD_OnClick} $Button OpenASIOHelpPage nsDialogs::Show + ASIOExists: + FunctionEnd Function OpenASIOHelpPage @@ -324,10 +348,11 @@ FunctionEnd Function ExitASIOInstalled ClearErrors EnumRegKey $0 HKLM "SOFTWARE\ASIO" 0 - IfErrors 0 SkipMessage - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(ASIO_EXIT_NO_DRIVER)" /sd IDNO IDYES SkipMessage - Abort - SkipMessage: + IfErrors 0 SkipMessage + MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(ASIO_EXIT_NO_DRIVER)" /sd IDNO IDYES SkipMessage + Abort + SkipMessage: + FunctionEnd ; Uninstaller @@ -369,11 +394,10 @@ Section "un.Install" ${EndIf} ; Remove the Start Menu and desktop shortcuts - IfFileExists "$DESKTOP\${APP_NAME}.lnk" deleteshortcut skipshortcut - deleteshortcut: - Delete "$DESKTOP\${APP_NAME}.lnk" - goto skipshortcut + IfFileExists "$DESKTOP\${APP_NAME}.lnk" 0 skipshortcut + Delete "$DESKTOP\${APP_NAME}.lnk" skipshortcut: + RMDir /r "$SMPROGRAMS\${APP_NAME}" ; There may be an auto run entry in the registry for the server, remove it From 61fe1f0bf60ce34e1790971c68c61935ffb913f5 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 19:35:06 +0100 Subject: [PATCH 2/6] Enable translation --- windows/installer.nsi | 41 ++++-------------------------- windows/translate/en.nsi | 37 +++++++++++++++++++++++++++ windows/translate/installerlng.nsi | 12 +++++++++ 3 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 windows/translate/en.nsi create mode 100644 windows/translate/installerlng.nsi diff --git a/windows/installer.nsi b/windows/installer.nsi index a9a56e9c25..d982e4bddd 100755 --- a/windows/installer.nsi +++ b/windows/installer.nsi @@ -72,42 +72,11 @@ Page Custom ASIOCheckInstalled ExitASIOInstalled !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH -; Supported languages configuration - languages other than English are disabled for now -; Additional languages can be added below, see https://nsis.sourceforge.io/Examples/Modern%20UI/MultiLanguage.nsi -!insertmacro MUI_LANGUAGE "English" ; The first language is the default -; !insertmacro MUI_LANGUAGE "Italian" - -LangString DESKTOP_SET_SHORTCUT ${LANG_ENGLISH} \ - "Create Desktop shortcut" -LangString INVALID_FOLDER_MSG ${LANG_ENGLISH} \ - "The destination folder already exists. Please enter a new destination folder." -; LangString INVALID_FOLDER_MSG ${LANG_ITALIAN} \ -; "La cartella di destinazione esiste già. Selezionare una nuova cartella di destinazione." - -LangString RUNNING_APP_MSG ${LANG_ENGLISH} \ - "${APP_NAME} is running. Please close it and run the setup again." -; LangString RUNNING_APP_MSG ${LANG_ITALIAN} \ -; "${APP_NAME} è in esecuzione. Chiudere l'applicazione prima di eseguire l'installazione." - -LangString OLD_WRONG_VER_FOUND ${LANG_ENGLISH} \ - "We detected an old version of Jamulus in your 32 Bit Program Files folder. It is strongly recommended to remove it before installing a new version of Jamulus. Do you want to remove it now?" - -LangString OLD_WRONG_VER_FOUND_CONFIRM ${LANG_ENGLISH} \ - "If you continue without removing it, your installation might be broken! Are you sure you don't want to remove the old version?" -LangString OLD_VER_REMOVE_FAILED ${LANG_ENGLISH} \ - "FATAL: THE UNINSTALLER FAILED. Once you click on OK the old version will remain on your PC and we will try to install the new version too. You can also press cancel and try to remove it on your own." -LangString ASIO_DRIVER_HEADER ${LANG_ENGLISH} \ - "ASIO driver" -LangString ASIO_DRIVER_SUB ${LANG_ENGLISH} \ - "To use Jamulus, you need an ASIO driver" -LangString ASIO_DRIVER_EXPLAIN ${LANG_ENGLISH} \ - "Jamulus needs an ASIO driver to provide low latency audio. More information:" -LangString ASIO_DRIVER_MORE_INFO ${LANG_ENGLISH} \ - "More information about ASIO on jamulus.io" -LangString ASIO_DRIVER_MORE_INFO_URL ${LANG_ENGLISH} \ - "https://jamulus.io/wiki/Installation-for-Windows#asio" -LangString ASIO_EXIT_NO_DRIVER ${LANG_ENGLISH} \ - "To provide low latency audio, Jamulus needs an ASIO driver. We couldn't find one on your PC, so you should install one like ASIO4ALL now. More information on how to do this is described on jamulus.io and linked on the page you just were on. To return to this page, click 'No'. If you click 'Yes', the installation will continue." +; Supported languages configuration +; Additional languages can be added in the file installerlng.nsi in the translate folder, see https://nsis.sourceforge.io/Examples/Modern%20UI/MultiLanguage.nsi + +!include "translate\installerlng.nsi" + ; Abort the installer/uninstaller if Jamulus is running !macro _AbortOnRunningApp diff --git a/windows/translate/en.nsi b/windows/translate/en.nsi new file mode 100644 index 0000000000..947af5e4c0 --- /dev/null +++ b/windows/translate/en.nsi @@ -0,0 +1,37 @@ +; English translation + +LangString DESKTOP_SET_SHORTCUT ${LANG_ENGLISH} \ + "Create Desktop shortcut" + +LangString INVALID_FOLDER_MSG ${LANG_ENGLISH} \ + "The destination folder already exists. Please enter a new destination folder." + +LangString RUNNING_APP_MSG ${LANG_ENGLISH} \ + "${APP_NAME} is running. Please close it and run the setup again." + +LangString OLD_WRONG_VER_FOUND ${LANG_ENGLISH} \ + "We detected an old version of ${APP_NAME} in your 32 Bit Program Files folder. It is strongly recommended to remove it before installing a new version of ${APP_NAME}. Do you want to remove it now?" + +LangString OLD_WRONG_VER_FOUND_CONFIRM ${LANG_ENGLISH} \ + "If you continue without removing it, your installation might be broken! Are you sure you don't want to remove the old version?" + +LangString OLD_VER_REMOVE_FAILED ${LANG_ENGLISH} \ + "FATAL: THE UNINSTALLER FAILED. Once you click on OK the old version will remain on your PC and we will try to install the new version too. You can also press cancel and try to remove it on your own." + +LangString ASIO_DRIVER_HEADER ${LANG_ENGLISH} \ + "ASIO driver" + +LangString ASIO_DRIVER_SUB ${LANG_ENGLISH} \ + "To use Jamulus, you need an ASIO driver" + +LangString ASIO_DRIVER_EXPLAIN ${LANG_ENGLISH} \ + "Jamulus needs an ASIO driver to provide low latency audio. More information:" + +LangString ASIO_DRIVER_MORE_INFO ${LANG_ENGLISH} \ + "More information about ASIO on jamulus.io" + +LangString ASIO_DRIVER_MORE_INFO_URL ${LANG_ENGLISH} \ + "https://jamulus.io/wiki/Installation-for-Windows#asio" + +LangString ASIO_EXIT_NO_DRIVER ${LANG_ENGLISH} \ + "To provide low latency audio, ${APP_NAME} needs an ASIO driver. We couldn't find one on your PC, so you should install one like ASIO4ALL (More information on jamulus.io under Installation for Windows). Do you still want to continue with the installation of ${APP_NAME} first?" diff --git a/windows/translate/installerlng.nsi b/windows/translate/installerlng.nsi new file mode 100644 index 0000000000..092bbffc65 --- /dev/null +++ b/windows/translate/installerlng.nsi @@ -0,0 +1,12 @@ +; Language configuration + +; Additional languages can be added in this file. See https://nsis.sourceforge.io/Examples/Modern%20UI/MultiLanguage.nsi + +!insertmacro MUI_LANGUAGE "English" ; The first language is the default +!include "translate\en.nsi" ; include english + +; !insertmacro MUI_LANGUAGE "German" +; !include "translate\de.nsi" + +; !insertmacro MUI_LANGUAGE "Italian" +; !include "translate\it.nsi" ; include italian From 0c8562e9e01244189fe4db7f282476292e5cf55a Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 19:35:26 +0100 Subject: [PATCH 3/6] Add german translation for installer --- windows/translate/de.nsi | 37 ++++++++++++++++++++++++++++++ windows/translate/installerlng.nsi | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 windows/translate/de.nsi diff --git a/windows/translate/de.nsi b/windows/translate/de.nsi new file mode 100644 index 0000000000..ddf69c16ab --- /dev/null +++ b/windows/translate/de.nsi @@ -0,0 +1,37 @@ +; German translation + +LangString DESKTOP_SET_SHORTCUT ${LANG_GERMAN} \ + "Desktopverknüpfung erstellen" + +LangString INVALID_FOLDER_MSG ${LANG_GERMAN} \ + "Das Zielverzeichnis existiert schon. Bitte wähle ein anderes Zielverzeichnis aus." + +LangString RUNNING_APP_MSG ${LANG_GERMAN} \ + "${APP_NAME} läuft noch. Bitte schließe das Programm und starte die Installation erneut." + +LangString OLD_WRONG_VER_FOUND ${LANG_GERMAN} \ + "Eine alte Version von ${APP_NAME} wurde in deinem 32 Bit Programme Ordner gefunden. Wir empfehlen, dass diese Version gelöscht wird. Willst du sie jetzt löschen?" + +LangString OLD_WRONG_VER_FOUND_CONFIRM ${LANG_GERMAN} \ + "Wenn du ohne sie zu löschen weitermachst, könnte es sein, dass deine Installation nicht mehr korrekt funktioniert. Bist du sicher, dass du die alte Version wirklich nicht löschen möchtest?" + +LangString OLD_VER_REMOVE_FAILED ${LANG_GERMAN} \ + "FATALER FEHLER: DAS DEINSTALLATIONSPROGRAMM HAT EINEN FEHLER GEMELDET. Wenn du auf OK klickst, wird eine alte Version auf deinem PC verbleiben und das Installationsprogramm weiterarbeiten und die neue Version installieren. Du kannst auch auf Abbrechen klicken und versuchen sie selbst per Hand zu deinstallieren." + +LangString ASIO_DRIVER_HEADER ${LANG_GERMAN} \ + "ASIO Treiber" + +LangString ASIO_DRIVER_SUB ${LANG_GERMAN} \ + "Jamulus benötigt einen ASIO Treiber" + +LangString ASIO_DRIVER_EXPLAIN ${LANG_GERMAN} \ + "Jamulus braucht einen ASIO Treiber um geringe Audio Latenz zu ermöglichen. Mehr Info:" + +LangString ASIO_DRIVER_MORE_INFO ${LANG_GERMAN} \ + "Mehr info über ASIO auf jamulus.io" + +LangString ASIO_DRIVER_MORE_INFO_URL ${LANG_GERMAN} \ + "https://jamulus.io/de/wiki/Installation-for-Windows#asio" + +LangString ASIO_EXIT_NO_DRIVER ${LANG_GERMAN} \ + "Um eine geringe Audio Verzögerung zu ermöglichen, braucht ${APP_NAME} einen ASIO Treiber. Da wir keinen auf deinem PC finden konnten, musst du einen, wie z.B. ASIO4ALL installieren (Infos dazu auf jamulus.io unter Installation auf Windows). Willst du trotzdem erst einmal mit der Installation von ${APP_NAME} fortfahren?" diff --git a/windows/translate/installerlng.nsi b/windows/translate/installerlng.nsi index 092bbffc65..94e9a34e56 100644 --- a/windows/translate/installerlng.nsi +++ b/windows/translate/installerlng.nsi @@ -5,8 +5,8 @@ !insertmacro MUI_LANGUAGE "English" ; The first language is the default !include "translate\en.nsi" ; include english -; !insertmacro MUI_LANGUAGE "German" -; !include "translate\de.nsi" +!insertmacro MUI_LANGUAGE "German" +!include "translate\de.nsi" ; !insertmacro MUI_LANGUAGE "Italian" ; !include "translate\it.nsi" ; include italian From 344838838f035d623b74bdad65bc5b45c0feb109 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 19:35:40 +0100 Subject: [PATCH 4/6] Add disabled italian translation --- windows/translate/it.nsi | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 windows/translate/it.nsi diff --git a/windows/translate/it.nsi b/windows/translate/it.nsi new file mode 100644 index 0000000000..f60e95cd3d --- /dev/null +++ b/windows/translate/it.nsi @@ -0,0 +1,37 @@ +; Italian translation + +LangString DESKTOP_SET_SHORTCUT ${LANG_ITALIAN} \ + "Create Desktop shortcut" + +LangString INVALID_FOLDER_MSG ${LANG_ITALIAN} \ + "La cartella di destinazione esiste già. Selezionare una nuova cartella di destinazione." + +LangString RUNNING_APP_MSG ${LANG_ITALIAN} \ + "${APP_NAME} è in esecuzione. Chiudere l'applicazione prima di eseguire l'installazione." + +LangString OLD_WRONG_VER_FOUND ${LANG_ITALIAN} \ + "We detected an old version of Jamulus in your 32 Bit Program Files folder. It is strongly recommended to remove it before installing a new version of Jamulus. Do you want to remove it now?" + +LangString OLD_WRONG_VER_FOUND_CONFIRM ${LANG_ITALIAN} \ + "If you continue without removing it, your installation might be broken! Are you sure you don't want to remove the old version?" + +LangString OLD_VER_REMOVE_FAILED ${LANG_ITALIAN} \ + "FATAL: THE UNINSTALLER FAILED. Once you click on OK the old version will remain on your PC and we will try to install the new version too. You can also press cancel and try to remove it on your own." + +LangString ASIO_DRIVER_HEADER ${LANG_ITALIAN} \ + "ASIO driver" + +LangString ASIO_DRIVER_SUB ${LANG_ITALIAN} \ + "To use Jamulus, you need an ASIO driver" + +LangString ASIO_DRIVER_EXPLAIN ${LANG_ITALIAN} \ + "Jamulus needs an ASIO driver to provide low latency audio. More information:" + +LangString ASIO_DRIVER_MORE_INFO ${LANG_ITALIAN} \ + "More information about ASIO on jamulus.io" + +LangString ASIO_DRIVER_MORE_INFO_URL ${LANG_ITALIAN} \ + "https://jamulus.io/wiki/Installation-for-Windows#asio" + +LangString ASIO_EXIT_NO_DRIVER ${LANG_ITALIAN} \ + "To provide low latency audio, Jamulus needs an ASIO driver. We couldn't find one on your PC, so you should install one like ASIO4ALL now. More information on how to do this is described on jamulus.io and linked on the page you just were on. To return to this page, click 'No'. If you click 'Yes', the installation will continue." From e104b8d9cedd20072f6618527a6b143eed23a3f1 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 22:03:40 +0100 Subject: [PATCH 5/6] Remove outdated installer banner --- windows/installer-banner.xcf | Bin 29277 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 windows/installer-banner.xcf diff --git a/windows/installer-banner.xcf b/windows/installer-banner.xcf deleted file mode 100644 index 9964e17d303fee93988d6e890e0051dd49ec705b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29277 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�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 From 8b00c6b51b103e50b3f688bc4589ffbc410dc4b5 Mon Sep 17 00:00:00 2001 From: ann0see <20726856+ann0see@users.noreply.github.com> Date: Sun, 24 Jan 2021 22:04:22 +0100 Subject: [PATCH 6/6] Manage 32/64Bit install via enable/disable section This allows us to show the correct storage size in the installer --- windows/installer.nsi | 124 ++++++++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 48 deletions(-) diff --git a/windows/installer.nsi b/windows/installer.nsi index d982e4bddd..99f3503e5b 100755 --- a/windows/installer.nsi +++ b/windows/installer.nsi @@ -19,6 +19,8 @@ !define UNINSTALL_EXE "Uninstall.exe" !define APP_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}" +!define SF_USELECTED 0 + ; General SetCompressor bzip2 ; Compression mode Unicode true ; Support all languages via Unicode @@ -102,6 +104,7 @@ Var Button Var bInstallDtIcon ; Installer + !macro InstallApplication buildArch !define prefix "${DEPLOY_PATH}\${buildArch}" !tempfile files @@ -169,6 +172,71 @@ Var bInstallDtIcon !macroend +!macro SecSelect SecId ; See https://nsis.sourceforge.io/Managing_Sections_on_Runtime + Push $0 + IntOp $0 ${SF_SELECTED} | ${SF_RO} + SectionSetFlags ${SecId} $0 + SectionSetInstTypes ${SecId} 1 + Pop $0 +!macroend + +!define SelectSection '!insertmacro SecSelect' + +!macro SecUnSelect SecId + Push $0 + IntOp $0 ${SF_USELECTED} | ${SF_RO} + SectionSetFlags ${SecId} $0 + SectionSetText ${SecId} "" + Pop $0 +!macroend + +!define UnSelectSection '!insertmacro SecUnSelect' + +Section "Install_64Bit" INST_64 + ; check if old, wrongly installed Jamulus exists. See https://stackoverflow.com/questions/27839860/nsis-check-if-registry-key-value-exists#27841158 + IfFileExists "$PROGRAMFILES32\Jamulus\Uninstall.exe" 0 continueinstall + + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND)" /sd IDYES IDNO idontcare IDCANCEL quit + goto removeold + + idontcare: ; Clicked no + MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND_CONFIRM)" /sd IDNO IDYES continueinstall + goto removeold + + removeold: ; Remove it + ExecWait '"$PROGRAMFILES32\Jamulus\Uninstall.exe" /S' $0 + ${IfNot} $0 == 0 + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(OLD_VER_REMOVE_FAILED)" /sd IDCANCEL IDOK continueinstall + goto quit + ${EndIf} + goto continueinstall + + quit: + Abort + + continueinstall: + + ; Install the main application + !insertmacro InstallApplication x86_64 + !insertmacro SetupShortcuts + + ; Install Microsoft Visual Studio redistributables and remove the installer afterwards + ExecWait "$\"$INSTDIR\${VC_REDIST64_EXE}$\" /q /norestart" + Delete "$INSTDIR\${VC_REDIST64_EXE}" +SectionEnd + +Section "Install_32Bit" INST_32 + + ; Install the main application + !insertmacro InstallApplication x86 + !insertmacro SetupShortcuts + + ; Install Microsoft Visual Studio redistributables and remove the installer afterwards + ExecWait "$\"$INSTDIR\${VC_REDIST32_EXE}$\" /q /norestart" + Delete "$INSTDIR\${VC_REDIST32_EXE}" + +SectionEnd + Function .onInit ; Set up registry access, installation folder and installer section for current architecture @@ -179,6 +247,11 @@ Function .onInit ReadRegStr $INSTDIR HKLM "${APP_INSTALL_KEY}" "${APP_INSTALL_VALUE}" IfErrors 0 +2 StrCpy $INSTDIR "$PROGRAMFILES64\${APP_NAME}" + + ; enable the 64 bit install section + ${SelectSection} ${INST_64} + ${UnSelectSection} ${INST_32} + ${Else} SetRegView 32 @@ -187,6 +260,9 @@ Function .onInit IfErrors 0 +2 StrCpy $INSTDIR "$PROGRAMFILES32\${APP_NAME}" + ; enable the 32 bit install section + ${SelectSection} ${INST_32} + ${UnSelectSection} ${INST_64} ${EndIf} ; Install for all users @@ -214,54 +290,6 @@ Function ValidateDestinationFolder FunctionEnd -Section Install - ${If} ${RunningX64} ; could be handled with disabled sections probably - - ; check if old, wrongly installed Jamulus exists. See https://stackoverflow.com/questions/27839860/nsis-check-if-registry-key-value-exists#27841158 - IfFileExists "$PROGRAMFILES32\Jamulus\Uninstall.exe" 0 continueinstall - - MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND)" /sd IDYES IDNO idontcare IDCANCEL quit - goto removeold - - idontcare: ; Clicked no - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(OLD_WRONG_VER_FOUND_CONFIRM)" /sd IDNO IDYES continueinstall - goto removeold - - removeold: ; Remove it - ExecWait '"$PROGRAMFILES32\Jamulus\Uninstall.exe" /S' $0 - ${IfNot} $0 == 0 - MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(OLD_VER_REMOVE_FAILED)" /sd IDCANCEL IDOK continueinstall - goto quit - ${EndIf} - goto continueinstall - - quit: - Abort - - continueinstall: - - ; Install the main application - !insertmacro InstallApplication x86_64 - !insertmacro SetupShortcuts - - ; Install Microsoft Visual Studio redistributables and remove the installer afterwards - ExecWait "$\"$INSTDIR\${VC_REDIST64_EXE}$\" /q /norestart" - Delete "$INSTDIR\${VC_REDIST64_EXE}" - - ${Else} - - ; Install the main application - !insertmacro InstallApplication x86 - !insertmacro SetupShortcuts - - ; Install Microsoft Visual Studio redistributables and remove the installer afterwards - ExecWait "$\"$INSTDIR\${VC_REDIST32_EXE}$\" /q /norestart" - Delete "$INSTDIR\${VC_REDIST32_EXE}" - - ${EndIf} - -SectionEnd - Function FinishPage.Show ; set the user choices if they were remembered WriteRegStr HKLM "${APP_INSTALL_KEY}" "${APP_INSTALL_ICON}" "0" ; this will be overwritten if the box is checked