views:

1606

answers:

2

I have just started using NSIS.
It works very well but I find the documentation a bit unstructured. How do I require user to uninstall previous version before installing a new version with NSIS?

NSIS (Nullsoft Scriptable Install System) is an open source system to create Windows installers.

+6  A: 

NSIS is a great Windows Installer. Here is how I use NSIS to uninstall the current version while installing a new version of the same application. Add the following function to your NSIS script.

Function .onInit

         Exec $INSTDIR\uninst.exe 

FunctionEnd

Also you can check out this link on the NSIS wiki on "Auto-uninstall old before installing new".

spinner_den
+1 for the link
brian_d
+3  A: 

Another approach is to make a UninstallPrevious hidden section and make it run before all other sections in the installer. I also suggest making the uninstaller run silently.

; The "" makes the section hidden.
Section "" SecUninstallPrevious

    Call UninstallPrevious

SectionEnd

Function UninstallPrevious

    ; Check for uninstaller.
    ReadRegStr $R0 HKLM "${HKLM_REG_KEY}" "InstallDir"

    ${If} $R0 == ""        
        Goto Done
    ${EndIf}

    DetailPrint "Removing previous installation."    

    ; Run the uninstaller silently.
    ExecWait '"$INSTDIR\Uninstall.exe /S"'

    Done:

FunctionEnd

The advantage of this approach is that the user won't uninstall the old version until they're ready to install the new version. Furthermore, they don't even have to make a decision about uninstalling the old version, it just magically disappears.

Of course, depending on your needs, you may want the user to confirm uninstalling, in which case use the spinner_den's approach.

cdmckay