|
| 1 | +; Copyright Dolphin Emulator Project / Azahar Emulator Project / Team Cemu |
| 2 | +; Licensed under MPL 2.0 with permission from authors |
| 3 | + |
| 4 | +; Usage: |
| 5 | +; get the latest nsis: https://nsis.sourceforge.io/Download |
| 6 | +; probably also want vscode extension: https://marketplace.visualstudio.com/items?itemName=idleberg.nsis |
| 7 | + |
| 8 | +; Require /DPRODUCT_VERSION for makensis. |
| 9 | +!ifndef PRODUCT_VERSION |
| 10 | + !error "PRODUCT_VERSION must be defined" |
| 11 | +!endif |
| 12 | + |
| 13 | +ManifestDPIAware true |
| 14 | + |
| 15 | +!define PRODUCT_NAME "Cemu" |
| 16 | +!define PRODUCT_PUBLISHER "Team Cemu" |
| 17 | +!define PRODUCT_WEB_SITE "https://cemu.info/" |
| 18 | +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe" |
| 19 | +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" |
| 20 | + |
| 21 | +!define BINARY_SOURCE_DIR "..\..\bin" |
| 22 | + |
| 23 | +Name "${PRODUCT_NAME}" |
| 24 | +OutFile "cemu-${PRODUCT_VERSION}-windows-x64-installer.exe" |
| 25 | +SetCompressor /SOLID lzma |
| 26 | +InstallDir "$LOCALAPPDATA\Cemu" |
| 27 | +ShowInstDetails show |
| 28 | +ShowUnInstDetails show |
| 29 | + |
| 30 | +!include "MUI2.nsh" |
| 31 | +; Custom page plugin |
| 32 | +!include "nsDialogs.nsh" |
| 33 | + |
| 34 | +; MUI Settings |
| 35 | +!define MUI_ICON "logo_icon.ico" |
| 36 | +!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" |
| 37 | + |
| 38 | +; License page |
| 39 | +!insertmacro MUI_PAGE_LICENSE "..\..\LICENSE.txt" |
| 40 | +; Desktop Shortcut page |
| 41 | +Page custom desktopShortcutPageCreate desktopShortcutPageLeave |
| 42 | +; Directory page |
| 43 | +!insertmacro MUI_PAGE_DIRECTORY |
| 44 | +; Instfiles page |
| 45 | +!insertmacro MUI_PAGE_INSTFILES |
| 46 | +; Finish page |
| 47 | +!define MUI_FINISHPAGE_RUN "$INSTDIR\Cemu.exe" |
| 48 | +!insertmacro MUI_PAGE_FINISH |
| 49 | + |
| 50 | +; Uninstaller pages |
| 51 | +!insertmacro MUI_UNPAGE_INSTFILES |
| 52 | + |
| 53 | +; Variables |
| 54 | +Var DesktopShortcutPageDialog |
| 55 | +Var DesktopShortcutCheckbox |
| 56 | +Var DesktopShortcut |
| 57 | + |
| 58 | +; Language files |
| 59 | +!insertmacro MUI_LANGUAGE "English" |
| 60 | +!insertmacro MUI_LANGUAGE "SimpChinese" |
| 61 | +!insertmacro MUI_LANGUAGE "TradChinese" |
| 62 | +!insertmacro MUI_LANGUAGE "Danish" |
| 63 | +!insertmacro MUI_LANGUAGE "Dutch" |
| 64 | +!insertmacro MUI_LANGUAGE "French" |
| 65 | +!insertmacro MUI_LANGUAGE "German" |
| 66 | +!insertmacro MUI_LANGUAGE "Hungarian" |
| 67 | +!insertmacro MUI_LANGUAGE "Italian" |
| 68 | +!insertmacro MUI_LANGUAGE "Japanese" |
| 69 | +!insertmacro MUI_LANGUAGE "Korean" |
| 70 | +!insertmacro MUI_LANGUAGE "Lithuanian" |
| 71 | +!insertmacro MUI_LANGUAGE "Norwegian" |
| 72 | +!insertmacro MUI_LANGUAGE "Polish" |
| 73 | +!insertmacro MUI_LANGUAGE "PortugueseBR" |
| 74 | +!insertmacro MUI_LANGUAGE "Romanian" |
| 75 | +!insertmacro MUI_LANGUAGE "Russian" |
| 76 | +!insertmacro MUI_LANGUAGE "Spanish" |
| 77 | +!insertmacro MUI_LANGUAGE "Swedish" |
| 78 | +!insertmacro MUI_LANGUAGE "Turkish" |
| 79 | +!insertmacro MUI_LANGUAGE "Vietnamese" |
| 80 | + |
| 81 | +; MUI end ------ |
| 82 | + |
| 83 | +Function .onInit |
| 84 | + StrCpy $DesktopShortcut 1 |
| 85 | + |
| 86 | + !insertmacro MUI_LANGDLL_DISPLAY |
| 87 | +FunctionEnd |
| 88 | + |
| 89 | +Function desktopShortcutPageCreate |
| 90 | + !insertmacro MUI_HEADER_TEXT "Create Desktop Shortcut" "Would you like to create a desktop shortcut?" |
| 91 | + nsDialogs::Create 1018 |
| 92 | + Pop $DesktopShortcutPageDialog |
| 93 | + ${If} $DesktopShortcutPageDialog == error |
| 94 | + Abort |
| 95 | + ${EndIf} |
| 96 | + |
| 97 | + ${NSD_CreateCheckbox} 0u 0u 100% 12u "Create a desktop shortcut" |
| 98 | + Pop $DesktopShortcutCheckbox |
| 99 | + ${NSD_SetState} $DesktopShortcutCheckbox $DesktopShortcut |
| 100 | + |
| 101 | + nsDialogs::Show |
| 102 | +FunctionEnd |
| 103 | + |
| 104 | +Function desktopShortcutPageLeave |
| 105 | + ${NSD_GetState} $DesktopShortcutCheckbox $DesktopShortcut |
| 106 | +FunctionEnd |
| 107 | + |
| 108 | +Section "Base" |
| 109 | + ExecWait '"$INSTDIR\uninst.exe" /S _?=$INSTDIR' |
| 110 | + |
| 111 | + SectionIn RO |
| 112 | + |
| 113 | + SetOutPath "$INSTDIR" |
| 114 | + |
| 115 | + ; The binplaced build output will be included verbatim. |
| 116 | + File /r "${BINARY_SOURCE_DIR}\*" |
| 117 | + |
| 118 | + ; Create start menu and desktop shortcuts |
| 119 | + CreateShortCut "$SMPROGRAMS\$(^Name).lnk" "$INSTDIR\Cemu.exe" |
| 120 | + ${If} $DesktopShortcut == 1 |
| 121 | + CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\Cemu.exe" |
| 122 | + ${EndIf} |
| 123 | +SectionEnd |
| 124 | + |
| 125 | +!include "FileFunc.nsh" |
| 126 | + |
| 127 | +Section -Post |
| 128 | + WriteUninstaller "$INSTDIR\uninst.exe" |
| 129 | + |
| 130 | + WriteRegStr HKCU "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Cemu.exe" |
| 131 | + |
| 132 | + ; Write metadata for add/remove programs applet |
| 133 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" |
| 134 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" |
| 135 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Cemu.exe" |
| 136 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" |
| 137 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" |
| 138 | + WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "InstallLocation" "$INSTDIR" |
| 139 | + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 |
| 140 | + IntFmt $0 "0x%08X" $0 |
| 141 | + WriteRegDWORD HKCU "${PRODUCT_UNINST_KEY}" "EstimatedSize" "$0" |
| 142 | + |
| 143 | + WriteRegStr HKCU "Software\Classes\.wud" "" "$(^Name)" |
| 144 | + WriteRegStr HKCU "Software\Classes\.wux" "" "$(^Name)" |
| 145 | + WriteRegStr HKCU "Software\Classes\.wua" "" "$(^Name)" |
| 146 | + WriteRegStr HKCU "Software\Classes\$(^Name)\DefaultIcon" "" "$INSTDIR\Cemu.exe,0" |
| 147 | + WriteRegStr HKCU "Software\Classes\$(^Name)\Shell\open\command" "" '"$INSTDIR\Cemu.exe" %1' |
| 148 | +SectionEnd |
| 149 | + |
| 150 | +Section Uninstall |
| 151 | + Delete "$DESKTOP\$(^Name).lnk" |
| 152 | + Delete "$SMPROGRAMS\$(^Name).lnk" |
| 153 | + |
| 154 | +; Be a bit careful to not delete files a user may have put into the install directory |
| 155 | + Delete "$INSTDIR\Cemu.exe" |
| 156 | + Delete "$INSTDIR\uninst.exe" |
| 157 | + RMDir /r "$INSTDIR\gameProfiles" |
| 158 | + RMDir /r "$INSTDIR\resources" |
| 159 | + RMDir "$INSTDIR" |
| 160 | + |
| 161 | + DeleteRegKey HKCU "Software\Classes\.wud" |
| 162 | + DeleteRegKey HKCU "Software\Classes\.wux" |
| 163 | + DeleteRegKey HKCU "Software\Classes\.wua" |
| 164 | + DeleteRegKey HKCU "Software\Classes\$(^Name)" |
| 165 | + |
| 166 | + DeleteRegKey HKCU "Software\Classes\discord-460807638964371468" |
| 167 | + |
| 168 | + DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}" |
| 169 | + DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}" |
| 170 | + |
| 171 | + SetAutoClose true |
| 172 | +SectionEnd |
0 commit comments