1; Modified to conform to Modern UI 2.0 2 3!define PROJECT_PATH ".." 4 5!define PRODUCT_NAME "%(display-name)s" 6!define PRODUCT_VERSION "%(version)s" 7!define PRODUCT_PUBLISHER "MusicBrainz" 8!define PRODUCT_DESCRIPTION "%(description)s" 9!define PRODUCT_URL "%(url)s" 10!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" 11!define PRODUCT_UNINST_ROOT_KEY "HKLM" 12 13SetCompressor /FINAL /SOLID LZMA 14Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" 15OutFile "picard-setup-${PRODUCT_VERSION}.exe" 16ShowInstDetails show 17ShowUnInstDetails show 18BrandingText " " 19Unicode true 20; We need this so Windows 7/Vista lets us install what we need to 21RequestExecutionLevel admin 22 23; The default installation directory 24InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}" 25 26; The default installation directory 27InstallDirRegKey HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir" 28 29!include "MUI2.nsh" 30!include "InstallOptions.nsh" 31!include "x64.nsh" 32 33; MUI Settings 34 35; Make installer pretty 36!define MUI_HEADERIMAGE 37!define MUI_HEADERIMAGE_RIGHT 38!define MUI_HEADERIMAGE_BITMAP "${PROJECT_PATH}\installer\images\hx.bmp" ; 39!define MUI_WELCOMEFINISHPAGE_BITMAP "${PROJECT_PATH}\installer\images\wiz.bmp" 40!define MUI_ICON "${PROJECT_PATH}\installer\images\tango-install.ico" 41!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\classic-uninstall.ico" 42 43; Abort Warning 44!define MUI_ABORTWARNING 45 46; Welcome page 47!define MUI_WELCOMEPAGE_TITLE_3LINES 48!insertmacro MUI_PAGE_WELCOME 49 50; License page 51!insertmacro MUI_PAGE_LICENSE "${PROJECT_PATH}\COPYING.txt" 52 53; Directory page 54!insertmacro MUI_PAGE_DIRECTORY 55 56; Components page 57!define MUI_COMPONENTSPAGE_SMALLDESC 58!insertmacro MUI_PAGE_COMPONENTS 59 60; Instfiles page 61!insertmacro MUI_PAGE_INSTFILES 62 63; Finish page 64!define MUI_FINISHPAGE_TITLE_3LINES 65!define MUI_FINISHPAGE_RUN "$WINDIR\explorer.exe" 66!define MUI_FINISHPAGE_RUN_PARAMETERS "$\"$INSTDIR\picard.exe$\"" 67!insertmacro MUI_PAGE_FINISH 68 69; Uninstaller pages 70!insertmacro MUI_UNPAGE_CONFIRM 71UninstPage custom un.RemoveSettingsPage 72!insertmacro MUI_UNPAGE_INSTFILES 73!define MUI_UNPAGE_FINISH_TITLE_3LINES 74!insertmacro MUI_UNPAGE_FINISH 75 76; Reserve files 77ReserveFile "removeSettings.ini" 78ReserveFile "${NSISDIR}\Plugins\x86-unicode\InstallOptions.dll" 79 80; Language handling 81!macro LOAD_LANGUAGE LANGUAGE 82 !insertmacro MUI_LANGUAGE "${LANGUAGE}" 83 !include "i18n\out\${LANGUAGE}.nsh" 84!macroend 85 86; Language files 87!insertmacro LOAD_LANGUAGE "English" 88; !insertmacro LOAD_LANGUAGE "Arabic" 89!insertmacro LOAD_LANGUAGE "Albanian" 90; !insertmacro LOAD_LANGUAGE "Catalan" 91; !insertmacro LOAD_LANGUAGE "Czech" 92; !insertmacro LOAD_LANGUAGE "Danish" 93!insertmacro LOAD_LANGUAGE "Dutch" 94!insertmacro LOAD_LANGUAGE "Estonian" 95!insertmacro LOAD_LANGUAGE "Finnish" 96!insertmacro LOAD_LANGUAGE "French" 97!insertmacro LOAD_LANGUAGE "German" 98; !insertmacro LOAD_LANGUAGE "Greek" 99!insertmacro LOAD_LANGUAGE "Hebrew" 100!insertmacro LOAD_LANGUAGE "Italian" 101!insertmacro LOAD_LANGUAGE "Japanese" 102; !insertmacro LOAD_LANGUAGE "Korean" 103; !insertmacro LOAD_LANGUAGE "Norwegian" 104; !insertmacro LOAD_LANGUAGE "Polish" 105; !insertmacro LOAD_LANGUAGE "Portuguese" 106!insertmacro LOAD_LANGUAGE "PortugueseBR" 107!insertmacro LOAD_LANGUAGE "Russian" 108!insertmacro LOAD_LANGUAGE "SimpChinese" 109; !insertmacro LOAD_LANGUAGE "Slovak" 110; !insertmacro LOAD_LANGUAGE "Slovenian" 111!insertmacro LOAD_LANGUAGE "Spanish" 112; !insertmacro LOAD_LANGUAGE "Swedish" 113!insertmacro LOAD_LANGUAGE "TradChinese" 114; !insertmacro LOAD_LANGUAGE "Turkish" 115; !insertmacro LOAD_LANGUAGE "Ukrainian" 116 117; Adds info to installer 118VIProductVersion "%(file-version)s" 119VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${PRODUCT_NAME}" 120VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "${PRODUCT_DESCRIPTION}" 121VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "${PRODUCT_PUBLISHER}" 122VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© ${PRODUCT_PUBLISHER} under the GNU GPLv2." 123VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installation for ${PRODUCT_NAME}" 124VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "%(version)s" 125VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "%(version)s" 126 127; Install 128Section "!$(SectionRequired)" required 129 SectionIn RO 130 SetOutPath "$INSTDIR" 131 SetOverwrite on 132 133 ; Files 134 File /r /x "locale" "${PROJECT_PATH}\dist\picard\" 135 136 ; Write the installation path into the registry 137 WriteRegStr HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir" "$INSTDIR" 138 139 ; Create uninstaller 140 WriteUninstaller "$INSTDIR\uninst.exe" 141 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}" 142 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\picard.exe" 143 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" 144 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" 145 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallSource" "$INSTDIR\" 146 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Comments" "${PRODUCT_DESCRIPTION}" 147 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_URL}" 148 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" 149SectionEnd 150 151Section "$(SectionLanguages)" lang 152 RMDir "$INSTDIR\locale" 153 CreateDirectory "$INSTDIR\locale" 154 SetOutPath "$INSTDIR\locale" 155 File /r "${PROJECT_PATH}\dist\picard\locale\" 156SectionEnd 157 158SectionGroup "$(SectionShortcuts)" shortcuts 159 Section "$(SectionStartmenu)" startmenu 160 SetShellVarContext all 161 SetOutPath "$INSTDIR" 162 CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}.lnk" "$INSTDIR\picard.exe" \ 163 "" "" "" SW_SHOWNORMAL "" "${PRODUCT_DESCRIPTION}" 164 SectionEnd 165 166 Section "$(SectionDesktop)" desktop 167 SetShellVarContext all 168 SetOutPath "$INSTDIR" 169 CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\picard.exe" \ 170 "" "" "" SW_SHOWNORMAL "" "${PRODUCT_DESCRIPTION}" 171 SectionEnd 172SectionGroupEnd 173 174; Uninstall 175Function un.RemoveSettingsPage 176 !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_TOP "" 177 !insertmacro MUI_DEFAULT MUI_UNCONFIRMPAGE_TEXT_LOCATION "" 178 !insertmacro INSTALLOPTIONS_DISPLAY "removeSettings.ini" 179FunctionEnd 180 181Section Uninstall 182 RMDir /r "$INSTDIR" 183 184 SetShellVarContext all 185 Delete "$DESKTOP\${PRODUCT_NAME}.lnk" 186 187 SetShellVarContext all 188 Delete "$SMPROGRAMS\${PRODUCT_NAME}.lnk" 189 190 SetShellVarContext all 191 Delete "$QUICKLAUNCH\${PRODUCT_NAME}.lnk" 192 193 DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" 194 DeleteRegKey HKLM "Software\MusicBrainz\${PRODUCT_NAME}" 195 196 !insertmacro INSTALLOPTIONS_READ $R0 "removeSettings.ini" "Field 1" "State" 197 StrCmp $R0 "1" 0 +2 198 ; Even more attempts 199 DeleteRegKey HKCU "Software\MusicBrainz\Picard\persist" 200 DeleteRegKey HKCU "Software\MusicBrainz\Picard\setting" 201 DeleteRegKey HKCU "Software\MusicBrainz\Picard" 202SectionEnd 203 204; Checks whether program is running. 205!define WNDCLASS "Qt5QWindowIcon" 206!define WNDTITLE "${PRODUCT_NAME}" 207Function un.onInit 208 FindWindow $0 "${WNDCLASS}" "${WNDTITLE}" 209 StrCmp $0 0 continueInstall 210 MessageBox MB_ICONSTOP|MB_OK "$(MsgApplicationRunning)" 211 Abort 212 continueInstall: 213 !insertmacro INSTALLOPTIONS_EXTRACT "removeSettings.ini" 214 !insertmacro INSTALLOPTIONS_WRITE "removeSettings.ini" "Field 1" "Text" "$(OptionRemoveSettings)" 215FunctionEnd 216 217Function .onInit 218 ; Abort installation if this is not a 64 bit system 219 ${IfNot} ${RunningX64} 220 MessageBox MB_ICONSTOP|MB_OK "$(MsgRequires64Bit)" 221 Abort 222 ${EndIf} 223 224 ; Abort installation if Picard is currently running 225 FindWindow $0 "${WNDCLASS}" "${WNDTITLE}" 226 StrCmp $0 0 continueInstall 227 MessageBox MB_ICONSTOP|MB_OK "$(MsgApplicationRunning)" 228 Abort 229 continueInstall: 230 231 ; Uninstall previous installation 232 ReadRegStr $R0 HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" 233 StrCmp $R0 "" skipUninstall 234 235 MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(MsgAlreadyInstalled)" IDOK uninstall 236 Abort 237 238 uninstall: 239 ClearErrors 240 Exec $R0 241 242 ; Check if previous install location was inside $PROGRAMFILES32 243 ReadRegStr $R0 HKLM "Software\MusicBrainz\${PRODUCT_NAME}" "InstallDir" 244 StrLen $R1 $PROGRAMFILES32 245 StrCpy $R2 $R0 $R1 246 StrCmp $R2 $PROGRAMFILES32 0 skipUninstall 247 StrCpy $INSTDIR "$PROGRAMFILES64\${PRODUCT_NAME}" 248 249 skipUninstall: 250 !insertmacro UnselectSection ${desktop} 251FunctionEnd 252 253!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN 254 !insertmacro MUI_DESCRIPTION_TEXT ${required} "$(MuiDescriptionRequired)" 255 !insertmacro MUI_DESCRIPTION_TEXT ${lang} "$(MuiDescriptionLang)" 256 !insertmacro MUI_DESCRIPTION_TEXT ${shortcuts} "$(MuiDescriptionShortcuts)" 257 !insertmacro MUI_DESCRIPTION_TEXT ${desktop} "$(MuiDescriptionDesktop)" 258 !insertmacro MUI_DESCRIPTION_TEXT ${startmenu} "$(MuiDescriptionStartMenu)" 259!insertmacro MUI_FUNCTION_DESCRIPTION_END 260