From fe58b67e24d007cb7dcd7005073a37bfba21737d Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Sat, 11 Jun 2011 12:14:56 +0200 Subject: [PATCH] Added CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL If CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL is set to ON the NSIS installer will look for a previous installed version and ask the user about uninstall. --- Modules/CPack.cmake | 4 ++++ Modules/CPackNSIS.cmake | 8 ++++++++ Modules/NSIS.template.in | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake index 571770e98..707a99131 100644 --- a/Modules/CPack.cmake +++ b/Modules/CPack.cmake @@ -341,6 +341,10 @@ cpack_set_if_not_set(CPACK_RESOURCE_FILE_WELCOME cpack_set_if_not_set(CPACK_MODULE_PATH "${CMAKE_MODULE_PATH}") +IF(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL) + SET(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) +ENDIF(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL) + IF(CPACK_NSIS_MODIFY_PATH) SET(CPACK_NSIS_MODIFY_PATH ON) ENDIF(CPACK_NSIS_MODIFY_PATH) diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake index 5e2ba17f8..e34f782c7 100644 --- a/Modules/CPackNSIS.cmake +++ b/Modules/CPackNSIS.cmake @@ -46,6 +46,14 @@ ##end # ##variable +# CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL - Ask about uninstalling +# previous versions first. +# If this is set to "ON", then an installer will look for previous +# installed versions and if one is found, ask the user whether to +# uninstall it before proceeding with the install. +##end +# +##variable # CPACK_NSIS_MODIFY_PATH - Modify PATH toggle. # If this is set to "ON", then an extra page # will appear in the installer that will allow the user to choose diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in index 819cc5cc0..d4f596433 100644 --- a/Modules/NSIS.template.in +++ b/Modules/NSIS.template.in @@ -899,6 +899,28 @@ SectionEnd ; "Program Files" for AllUsers, "My Documents" for JustMe... Function .onInit + StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst + + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "UninstallString" + StrCmp $0 "" inst + + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ + "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ + IDYES uninst IDNO inst + Abort + +;Run the uninstaller +uninst: + ClearErrors + ExecWait '$0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file + + IfErrors uninst_failed inst +uninst_failed: + MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." + Abort + + +inst: ; Reads components status for registry !insertmacro SectionList "InitSection"