From 7ff3d76b0acd21d3b21cf1fd03d4cc1ad935ef76 Mon Sep 17 00:00:00 2001 From: Shawn Hoffman Date: Fri, 9 Jan 2009 16:04:28 +0000 Subject: [PATCH] Update nsis installer and some cleanup. Note: I'm not sure if the installer yet allows for mutliple revisions installed side-by-side, but that is the intention. Also, I need to figure out how to do subsections and some trickies in nsis. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1842 8ced0084-cf51-0410-be5f-012b33b47a6e --- Installer/Dolphin.ini | 4 - Installer/GetSVNRev.nsi | 11 + Installer/Installer_win32.nsi | 256 ++++++++++++------- Installer/Installer_x64.nsi | 264 +++++++++++++------- Installer/Licence.txt | 2 +- Installer/wizard-uninstall.bmp | Bin 52576 -> 0 bytes Installer/wizard.bmp | Bin 52576 -> 0 bytes Source/Core/DolphinWX/Src/ConfigMain.cpp | 2 +- Source/Core/DolphinWX/Src/ISOProperties.cpp | 8 +- 9 files changed, 362 insertions(+), 185 deletions(-) delete mode 100644 Installer/Dolphin.ini create mode 100644 Installer/GetSVNRev.nsi delete mode 100644 Installer/wizard-uninstall.bmp delete mode 100644 Installer/wizard.bmp diff --git a/Installer/Dolphin.ini b/Installer/Dolphin.ini deleted file mode 100644 index 2b80e832b0..0000000000 --- a/Installer/Dolphin.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Default] -GFXPlugin = Plugins\Plugin_VideoOGL.dll -DSPPlugin = Plugins\Plugin_DSP_HLE.dll -PadPlugin = Plugins\Plugin_PadSimple.dll diff --git a/Installer/GetSVNRev.nsi b/Installer/GetSVNRev.nsi new file mode 100644 index 0000000000..4b45cdc054 --- /dev/null +++ b/Installer/GetSVNRev.nsi @@ -0,0 +1,11 @@ +OutFile "GetSVNRev.exe" +SilentInstall silent + +Section + ; Create template for SubWCRev + FileOpen $R0 "svnrev_template.txt" w + FileWrite $R0 '!define PRODUCT_VERSION "$$WCREV$$"' + FileClose $R0 + ; Make a file with only rev # in it + Exec "..\Source\Core\Common\SubWCRev.exe ..\ svnrev_template.txt svnrev.txt" +SectionEnd \ No newline at end of file diff --git a/Installer/Installer_win32.nsi b/Installer/Installer_win32.nsi index 1104b42a55..f28105aa2b 100644 --- a/Installer/Installer_win32.nsi +++ b/Installer/Installer_win32.nsi @@ -1,105 +1,180 @@ -!define BASE_PATH "..\Binary\win32" -!define SETUP_NAME "DolphinSetup_32bit_14b" - -; Script generated by the HM NIS Edit Script Wizard. +!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script +!include "svnrev.txt" ; !defines PRODUCT_VERSION +!define BASE_DIR "..\Binary\win32" ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "Dolphin" -!define PRODUCT_VERSION "1.4b" -!define PRODUCT_PUBLISHER "Dolphin DevTeam" +!define PRODUCT_PUBLISHER "Dolphin Team" !define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\DolphinWx.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" +SetCompressor lzma + ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING -!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" +!define MUI_ICON "Dolphin.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "wizard.bmp" - -; Welcome page -!insertmacro MUI_PAGE_WELCOME +; Language Selection Dialog Settings +!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" +!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" + ; License page !insertmacro MUI_PAGE_LICENSE "Licence.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page -!define MUI_FINISHPAGE_RUN "$INSTDIR\DolphinWx.exe" +; We launch the desktop shortcut to set the working dir +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files +!insertmacro MUI_LANGUAGE "Afrikaans" +!insertmacro MUI_LANGUAGE "Albanian" +!insertmacro MUI_LANGUAGE "Arabic" +!insertmacro MUI_LANGUAGE "Basque" +!insertmacro MUI_LANGUAGE "Belarusian" +!insertmacro MUI_LANGUAGE "Bosnian" +!insertmacro MUI_LANGUAGE "Breton" +!insertmacro MUI_LANGUAGE "Bulgarian" +!insertmacro MUI_LANGUAGE "Catalan" +!insertmacro MUI_LANGUAGE "Croatian" +!insertmacro MUI_LANGUAGE "Czech" +!insertmacro MUI_LANGUAGE "Danish" +!insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "Estonian" +!insertmacro MUI_LANGUAGE "Farsi" +!insertmacro MUI_LANGUAGE "Finnish" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "Galician" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Greek" +!insertmacro MUI_LANGUAGE "Hebrew" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Icelandic" +!insertmacro MUI_LANGUAGE "Indonesian" +!insertmacro MUI_LANGUAGE "Irish" +!insertmacro MUI_LANGUAGE "Italian" +!insertmacro MUI_LANGUAGE "Japanese" +!insertmacro MUI_LANGUAGE "Korean" +!insertmacro MUI_LANGUAGE "Kurdish" +!insertmacro MUI_LANGUAGE "Latvian" +!insertmacro MUI_LANGUAGE "Lithuanian" +!insertmacro MUI_LANGUAGE "Luxembourgish" +!insertmacro MUI_LANGUAGE "Macedonian" +!insertmacro MUI_LANGUAGE "Malay" +!insertmacro MUI_LANGUAGE "Mongolian" +!insertmacro MUI_LANGUAGE "Norwegian" +!insertmacro MUI_LANGUAGE "NorwegianNynorsk" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "PortugueseBR" +!insertmacro MUI_LANGUAGE "Romanian" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Serbian" +!insertmacro MUI_LANGUAGE "SerbianLatin" +!insertmacro MUI_LANGUAGE "SimpChinese" +!insertmacro MUI_LANGUAGE "Slovak" +!insertmacro MUI_LANGUAGE "Slovenian" +!insertmacro MUI_LANGUAGE "Spanish" +!insertmacro MUI_LANGUAGE "SpanishInternational" +!insertmacro MUI_LANGUAGE "Swedish" +!insertmacro MUI_LANGUAGE "Thai" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "Turkish" +!insertmacro MUI_LANGUAGE "Ukrainian" +!insertmacro MUI_LANGUAGE "Uzbek" +!insertmacro MUI_LANGUAGE "Welsh" + +; Reserve files +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "${SETUP_NAME}.exe" -InstallDir "$PROGRAMFILES32\Dolphin" +!define UN_NAME "Uninstall $(^Name)" +OutFile "Dolphin_Installer_win32.exe" +InstallDir "$PROGRAMFILES\$(^Name)" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show -Section "Hauptgruppe" SEC01 - SetOverwrite try - - ; --- copy executable - SetOutPath "$INSTDIR" - File "${BASE_PATH}\cg.dll" - File "${BASE_PATH}\cgGL.dll" - File "${BASE_PATH}\DolphinWx.exe" - File "Dolphin.ini" - - ; --- copy plugins - SetOutPath "$INSTDIR\Plugins" - File "${BASE_PATH}\Plugins\Plugin_DSP.dll" - File "${BASE_PATH}\Plugins\Plugin_PadDX9.dll" - File "${BASE_PATH}\Plugins\Plugin_PadSimple.dll" - File "${BASE_PATH}\Plugins\Plugin_VideoDX9.dll" - File "${BASE_PATH}\Plugins\Plugin_VideoOGL.dll" - - ; --- copy help - ; SetOutPath "$INSTDIR\Help" - ; File "${BASE_PATH}\Help\Dolphin.chm" - - ; --- copy data directory - SetOutPath "$INSTDIR\Data" - File "${BASE_PATH}\Data\*.*" - - ; --- create data directories and copy IPLs - SetOutPath "$INSTDIR\Data_EUR" - File "${BASE_PATH}\Data_EUR\SRAM.raw" - SetOutPath "$INSTDIR\Data_JAP" - File "${BASE_PATH}\Data_JAP\SRAM.raw" - SetOutPath "$INSTDIR\Data_USA" - File "${BASE_PATH}\Data_USA\SRAM.raw" - - ; --- copy patches directory - SetOutPath "$INSTDIR\Patches" - File "${BASE_PATH}\Patches\*.*" - - ; -- create shortcuts +Function .onInit + !insertmacro MUI_LANGDLL_DISPLAY +FunctionEnd + +Section "Base" SEC01 + SetShellVarContext all + ; Dolphin exe and dlls + ; TODO: cg is only for OGL, SDL is only for nJoy + ; TODO: Make a nice subsection-ized display SetOutPath "$INSTDIR" + SetOverwrite ifnewer + File "${BASE_DIR}\DolphinWx.exe" + File "..\Externals\Cg\cg.dll" + File "..\Externals\Cg\cgGL.dll" + File "..\Externals\WiiUse\Win32\wiiuse.dll" + File "..\Externals\SDL\win32\SDL.dll" + ; This needs to be done after DolphinWx.exe is copied CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" - CreateShortCut "$SMPROGRAMS\Dolphin\${PRODUCT_NAME}.lnk" "$INSTDIR\DolphinWx.exe" - CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\DolphinWx.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\$(^Name).lnk" "$INSTDIR\DolphinWx.exe" + CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\DolphinWx.exe" + ; Plugins + SetOutPath "$INSTDIR\Plugins" + SetOverwrite ifnewer + File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_NULL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" + File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" + File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" + + ; GC/Wii static settings + SetOutPath "$INSTDIR\Sys\GC" + SetOverwrite ifnewer + File "..\Data\Sys\GC\font_ansi.bin" + File "..\Data\Sys\GC\font_sjis.bin" + SetOutPath "$INSTDIR\Sys\Wii" + SetOverwrite ifnewer + File "..\Data\Sys\Wii\setting-eur.txt" + File "..\Data\Sys\Wii\setting-jpn.txt" + File "..\Data\Sys\Wii\setting-usa.txt" + + ; GC/Wii User settings + SetOutPath "$INSTDIR\User\GC" + SetOutPath "$INSTDIR\User\Wii\shared2\sys" + SetOverwrite ifnewer + File "..\Data\User\Wii\shared2\sys\readme.txt" + File "..\Data\User\Wii\shared2\sys\SYSCONF" + + ; GameConfigs + SetOutPath "$INSTDIR\User\GameConfig" + SetOverwrite ifnewer + File "..\Data\User\GameConfig\*.*" SectionEnd Section -AdditionalIcons - SetOutPath $INSTDIR - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" - CreateShortCut "$SMPROGRAMS\Dolphin\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" - CreateShortCut "$SMPROGRAMS\Dolphin\Uninstall.lnk" "$INSTDIR\uninst.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post @@ -113,48 +188,53 @@ Section -Post WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd +; Section descriptions +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + Function un.onUninstSuccess HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ + ATTENTION: You must manually delete$\r$\n$INSTDIR" FunctionEnd Function un.onInit - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 +!insertmacro MUI_UNGETLANGUAGE + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 Abort FunctionEnd Section Uninstall + SetShellVarContext all + ; Only uninstall what we put there; all $INSTDIR\User is left as is + Delete "$INSTDIR\uninst.exe" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\Plugins\*.dll" + Delete "$INSTDIR\Sys\Wii\setting-usa.txt" + Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" + Delete "$INSTDIR\Sys\Wii\setting-eur.txt" + Delete "$INSTDIR\Sys\GC\font_sjis.bin" + Delete "$INSTDIR\Sys\GC\font_ansi.bin" + Delete "$INSTDIR\DolphinWx.exe" - Delete "$INSTDIR\Plugins\*.*" - Delete "$INSTDIR\Data\*.*" - Delete "$INSTDIR\Data_USA\*.*" - Delete "$INSTDIR\Data_EUR\*.*" - Delete "$INSTDIR\Data_JAP\*.*" - Delete "$INSTDIR\Help\*.*" - Delete "$INSTDIR\Patches\*.*" - Delete "$INSTDIR\*.*" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" + Delete "$DESKTOP\$(^Name).lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\$(^Name).lnk" - Delete "$SMPROGRAMS\Dolphin\Uninstall.lnk" - Delete "$SMPROGRAMS\Dolphin\Website.lnk" - Delete "$DESKTOP\${PRODUCT_NAME}.lnk" - Delete "$SMPROGRAMS\Dolphin\${PRODUCT_NAME}.lnk" - - RMDir "$SMPROGRAMS\Dolphin" + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" + RMDir "$INSTDIR\Sys\GC" + RMDir "$INSTDIR\Sys\Wii" + RMDir "$INSTDIR\Sys" RMDir "$INSTDIR\Plugins" - RMDir "$INSTDIR\Help" - RMDir "$INSTDIR\Data_USA" - RMDir "$INSTDIR\Data_EUR" - RMDir "$INSTDIR\Data_JAP" - RMDir "$INSTDIR\Data" - RMDir "$INSTDIR\Patches" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - - ; Delete old registry keys - DeleteRegKey HKCU "Software\\${PRODUCT_NAME}" - - ; SetAutoClose true -SectionEnd \ No newline at end of file + SetAutoClose true +SectionEnd + +Function LaunchDolphin + ExecShell "" "$DESKTOP\$(^Name).lnk" +FunctionEnd \ No newline at end of file diff --git a/Installer/Installer_x64.nsi b/Installer/Installer_x64.nsi index 711ef25ad4..f98599030b 100644 --- a/Installer/Installer_x64.nsi +++ b/Installer/Installer_x64.nsi @@ -1,105 +1,190 @@ -!define BASE_PATH "..\Binary\x64" -!define SETUP_NAME "DolphinSetup_64bit_14b" - -; Script generated by the HM NIS Edit Script Wizard. +!system "GetSVNRev.exe" ; ATTENTION: This MUST be run before this script +!include "svnrev.txt" ; !defines PRODUCT_VERSION +!define BASE_DIR "..\Binary\x64" ; HM NIS Edit Wizard helper defines -!define PRODUCT_NAME "Dolphin (64 bit)" -!define PRODUCT_VERSION "1.4b" -!define PRODUCT_PUBLISHER "Dolphin DevTeam" +!define PRODUCT_NAME "Dolphin x64" +!define PRODUCT_PUBLISHER "Dolphin Team" !define PRODUCT_WEB_SITE "http://www.dolphin-emu.com" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}" +!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\DolphinWx.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" +SetCompressor lzma + ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING -!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" +!define MUI_ICON "Dolphin.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "wizard.bmp" - -; Welcome page -!insertmacro MUI_PAGE_WELCOME +; Language Selection Dialog Settings +!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" +!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" +!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language" + ; License page !insertmacro MUI_PAGE_LICENSE "Licence.txt" +; Components page +!insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page -!define MUI_FINISHPAGE_RUN "$INSTDIR\DolphinWx.exe" +; We launch the desktop shortcut to set the working dir +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_TEXT "Start $(^Name)" +!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchDolphin" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files +!insertmacro MUI_LANGUAGE "Afrikaans" +!insertmacro MUI_LANGUAGE "Albanian" +!insertmacro MUI_LANGUAGE "Arabic" +!insertmacro MUI_LANGUAGE "Basque" +!insertmacro MUI_LANGUAGE "Belarusian" +!insertmacro MUI_LANGUAGE "Bosnian" +!insertmacro MUI_LANGUAGE "Breton" +!insertmacro MUI_LANGUAGE "Bulgarian" +!insertmacro MUI_LANGUAGE "Catalan" +!insertmacro MUI_LANGUAGE "Croatian" +!insertmacro MUI_LANGUAGE "Czech" +!insertmacro MUI_LANGUAGE "Danish" +!insertmacro MUI_LANGUAGE "Dutch" !insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "Estonian" +!insertmacro MUI_LANGUAGE "Farsi" +!insertmacro MUI_LANGUAGE "Finnish" +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "Galician" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Greek" +!insertmacro MUI_LANGUAGE "Hebrew" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Icelandic" +!insertmacro MUI_LANGUAGE "Indonesian" +!insertmacro MUI_LANGUAGE "Irish" +!insertmacro MUI_LANGUAGE "Italian" +!insertmacro MUI_LANGUAGE "Japanese" +!insertmacro MUI_LANGUAGE "Korean" +!insertmacro MUI_LANGUAGE "Kurdish" +!insertmacro MUI_LANGUAGE "Latvian" +!insertmacro MUI_LANGUAGE "Lithuanian" +!insertmacro MUI_LANGUAGE "Luxembourgish" +!insertmacro MUI_LANGUAGE "Macedonian" +!insertmacro MUI_LANGUAGE "Malay" +!insertmacro MUI_LANGUAGE "Mongolian" +!insertmacro MUI_LANGUAGE "Norwegian" +!insertmacro MUI_LANGUAGE "NorwegianNynorsk" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "PortugueseBR" +!insertmacro MUI_LANGUAGE "Romanian" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Serbian" +!insertmacro MUI_LANGUAGE "SerbianLatin" +!insertmacro MUI_LANGUAGE "SimpChinese" +!insertmacro MUI_LANGUAGE "Slovak" +!insertmacro MUI_LANGUAGE "Slovenian" +!insertmacro MUI_LANGUAGE "Spanish" +!insertmacro MUI_LANGUAGE "SpanishInternational" +!insertmacro MUI_LANGUAGE "Swedish" +!insertmacro MUI_LANGUAGE "Thai" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "Turkish" +!insertmacro MUI_LANGUAGE "Ukrainian" +!insertmacro MUI_LANGUAGE "Uzbek" +!insertmacro MUI_LANGUAGE "Welsh" + +; Reserve files +!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "${SETUP_NAME}.exe" -InstallDir "$PROGRAMFILES64\Dolphin" +!define UN_NAME "Uninstall $(^Name)" +OutFile "Dolphin_Installer_x64.exe" +InstallDir "$PROGRAMFILES64\$(^Name)" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show -Section "Hauptgruppe" SEC01 - SetOverwrite try - - ; --- copy executable - SetOutPath "$INSTDIR" - File "${BASE_PATH}\cg.dll" - File "${BASE_PATH}\cgGL.dll" - File "${BASE_PATH}\DolphinWx.exe" - File "Dolphin.ini" +Function .onInit + !include "x64.nsh" + ; This checks if nsis is running under wow64 (since nsis is only 32bit) + ; hopefully this will be dependable in the future too... + ${If} ${RunningX64} + !insertmacro MUI_LANGDLL_DISPLAY + SetRegView 64 + ${Else} + MessageBox MB_OK|MB_ICONSTOP "You cannot run this version of Dolphin on your OS.$\r$\n\ + Please use a 64-bit OS or download a 32-bit version of Dolphin." + Quit + ${EndIf} +FunctionEnd - ; --- copy plugins +Section "Complete" SEC01 + SetShellVarContext all + ; Dolphin exe and dlls + ; TODO: cg is only for OGL, SDL is only for nJoy + ; TODO: Make a nice subsection-ized display + SetOutPath "$INSTDIR" + SetOverwrite ifnewer + File "${BASE_DIR}\DolphinWx.exe" + File "..\Externals\Cg64\cg.dll" + File "..\Externals\Cg64\cgGL.dll" + File "..\Externals\WiiUse\X64\wiiuse.dll" + File "..\Externals\SDL\x64\SDL.dll" + ; This needs to be done after DolphinWx.exe is copied + CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\$(^Name).lnk" "$INSTDIR\DolphinWx.exe" + CreateShortCut "$DESKTOP\$(^Name).lnk" "$INSTDIR\DolphinWx.exe" + + ; Plugins SetOutPath "$INSTDIR\Plugins" - File "${BASE_PATH}\Plugins\Plugin_DSP.dll" - File "${BASE_PATH}\Plugins\Plugin_PadDX9.dll" - File "${BASE_PATH}\Plugins\Plugin_PadSimple.dll" - File "${BASE_PATH}\Plugins\Plugin_VideoDX9.dll" - File "${BASE_PATH}\Plugins\Plugin_VideoOGL.dll" + SetOverwrite ifnewer + File "${BASE_DIR}\Plugins\Plugin_DSP_HLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_LLE.dll" + File "${BASE_DIR}\Plugins\Plugin_DSP_NULL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL.dll" + File "${BASE_DIR}\Plugins\Plugin_nJoy_SDL_Test.dll" + File "${BASE_DIR}\Plugins\Plugin_PadSimple.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoDX9.dll" + File "${BASE_DIR}\Plugins\Plugin_VideoOGL.dll" + File "${BASE_DIR}\Plugins\Plugin_Wiimote.dll" - ; --- copy help - ; SetOutPath "$INSTDIR\Help" - ; File "${BASE_PATH}\Help\Dolphin.chm" + ; GC/Wii static settings + SetOutPath "$INSTDIR\Sys\GC" + SetOverwrite ifnewer + File "..\Data\Sys\GC\font_ansi.bin" + File "..\Data\Sys\GC\font_sjis.bin" + SetOutPath "$INSTDIR\Sys\Wii" + SetOverwrite ifnewer + File "..\Data\Sys\Wii\setting-eur.txt" + File "..\Data\Sys\Wii\setting-jpn.txt" + File "..\Data\Sys\Wii\setting-usa.txt" - ; --- copy data directory - SetOutPath "$INSTDIR\Data" - File "${BASE_PATH}\Data\*.*" - - ; --- create data directories and copy IPLs - SetOutPath "$INSTDIR\Data_EUR" - File "${BASE_PATH}\Data_EUR\SRAM.raw" - SetOutPath "$INSTDIR\Data_JAP" - File "${BASE_PATH}\Data_JAP\SRAM.raw" - SetOutPath "$INSTDIR\Data_USA" - File "${BASE_PATH}\Data_USA\SRAM.raw" - - ; --- copy patches directory - SetOutPath "$INSTDIR\Patches" - File "${BASE_PATH}\Patches\*.*" - - ; -- create shortcuts - SetOutPath "$INSTDIR" - CreateDirectory "$SMPROGRAMS\Dolphin" - CreateShortCut "$SMPROGRAMS\Dolphin\${PRODUCT_NAME}.lnk" "$INSTDIR\DolphinWx.exe" - CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\DolphinWx.exe" + ; GC/Wii User settings + SetOutPath "$INSTDIR\User\GC" + SetOutPath "$INSTDIR\User\Wii\shared2\sys" + SetOverwrite ifnewer + File "..\Data\User\Wii\shared2\sys\readme.txt" + File "..\Data\User\Wii\shared2\sys\SYSCONF" + ; GameConfigs + SetOutPath "$INSTDIR\User\GameConfig" + SetOverwrite ifnewer + File "..\Data\User\GameConfig\*.*" SectionEnd Section -AdditionalIcons - SetOutPath $INSTDIR - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" - CreateShortCut "$SMPROGRAMS\Dolphin\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" - CreateShortCut "$SMPROGRAMS\Dolphin\Uninstall (64 bit).lnk" "$INSTDIR\uninst.exe" + CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post @@ -113,48 +198,53 @@ Section -Post WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd +; Section descriptions +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "It is recommended that you install all of the included files." +!insertmacro MUI_FUNCTION_DESCRIPTION_END + Function un.onUninstSuccess HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." + MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was uninstalled successfully.$\r$\n\ + ATTENTION: You must manually delete$\r$\n$INSTDIR" FunctionEnd Function un.onInit - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 +!insertmacro MUI_UNGETLANGUAGE + MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to remove $(^Name)?" IDYES +2 Abort FunctionEnd Section Uninstall + SetShellVarContext all + ; Only uninstall what we put there; all $INSTDIR\User is left as is + Delete "$INSTDIR\uninst.exe" + Delete "$INSTDIR\*.dll" + Delete "$INSTDIR\Plugins\*.dll" + Delete "$INSTDIR\Sys\Wii\setting-usa.txt" + Delete "$INSTDIR\Sys\Wii\setting-jpn.txt" + Delete "$INSTDIR\Sys\Wii\setting-eur.txt" + Delete "$INSTDIR\Sys\GC\font_sjis.bin" + Delete "$INSTDIR\Sys\GC\font_ansi.bin" + Delete "$INSTDIR\DolphinWx.exe" - Delete "$INSTDIR\Plugins\*.*" - Delete "$INSTDIR\Data\*.*" - Delete "$INSTDIR\Data_USA\*.*" - Delete "$INSTDIR\Data_EUR\*.*" - Delete "$INSTDIR\Data_JAP\*.*" - Delete "$INSTDIR\Help\*.*" - Delete "$INSTDIR\Patches\*.*" - Delete "$INSTDIR\*.*" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\${UN_NAME}.lnk" + Delete "$DESKTOP\$(^Name).lnk" + Delete "$SMPROGRAMS\${PRODUCT_NAME}\$(^Name).lnk" - Delete "$SMPROGRAMS\Dolphin\Uninstall (64 bit).lnk" - Delete "$SMPROGRAMS\Dolphin\Website.lnk" - Delete "$DESKTOP\${PRODUCT_NAME}.lnk" - Delete "$SMPROGRAMS\Dolphin\${PRODUCT_NAME}.lnk" - - RMDir "$SMPROGRAMS\Dolphin" + RMDir "$SMPROGRAMS\${PRODUCT_NAME}" + RMDir "$INSTDIR\Sys\GC" + RMDir "$INSTDIR\Sys\Wii" + RMDir "$INSTDIR\Sys" RMDir "$INSTDIR\Plugins" - RMDir "$INSTDIR\Help" - RMDir "$INSTDIR\Data_USA" - RMDir "$INSTDIR\Data_EUR" - RMDir "$INSTDIR\Data_JAP" - RMDir "$INSTDIR\Data" - RMDir "$INSTDIR\Patches" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - - ; Delete old registry keys - DeleteRegKey HKCU "Software\\Dolphin" - - ; SetAutoClose true -SectionEnd \ No newline at end of file + SetAutoClose true +SectionEnd + +Function LaunchDolphin + ExecShell "" "$DESKTOP\$(^Name).lnk" +FunctionEnd \ No newline at end of file diff --git a/Installer/Licence.txt b/Installer/Licence.txt index d93173f6e1..6677818106 100644 --- a/Installer/Licence.txt +++ b/Installer/Licence.txt @@ -1 +1 @@ -THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE. \ No newline at end of file +This package is provided “as is” and without warranty. Any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the authors be liable to any party for any direct, indirect, incidental, special, exemplary, or consequential damages arising in any way out of the use of this package. diff --git a/Installer/wizard-uninstall.bmp b/Installer/wizard-uninstall.bmp deleted file mode 100644 index 097d09429264c6444bcfbff3e0f9b53b5da41d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52576 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.c_str(), OpenISO->GetName().c_str()); - fprintf(f, "[Core]\n#Values set here will override the main dolphin settings.\n"); - fprintf(f, "[EmuState]\n#The Emulation State. 1 is worst, 5 is best, 0 is not set.\n"); - fprintf(f, "[OnFrame]\n#Add memory patches to be applied every frame here.\n"); - fprintf(f, "[ActionReplay]\n#Add action replay cheats here.\n"); + fprintf(f, "[Core] Values set here will override the main dolphin settings.\n"); + fprintf(f, "[EmuState] The Emulation State. 1 is worst, 5 is best, 0 is not set.\n"); + fprintf(f, "[OnFrame] Add memory patches to be applied every frame here.\n"); + fprintf(f, "[ActionReplay] Add action replay cheats here.\n"); fclose(f); if (GameIni.Load(GameIniFile.c_str())) LoadGameConfig();