sazr
sazr

Reputation: 25928

Create more than 1 uninstaller in a NSIS Section

Can a NSIS Section create more than 1 uninstaller?

My installer can install plugins for 3 different versions of an Application - therefore theres 3 different directories where the installer will install the files.

In each of those directories I want to add an uninstaller file that will remove only the files in that directory.

Each of the 3 uninstall files are created within the same Section area, is this invalid? How can I get my script to create 3 uninstallers(if possible)?

The following Section only creates one uninstaller, the last one(Version 10 uninstaller):

Section "Install Plugin Files" MainSetup

    CheckInstallVers8:
        IntCmp $installVers8  1 InstallVersion8 CheckInstallVers9 InstallVersion8
    CheckInstallVers9:
        IntCmp $installVers9  1 InstallVersion9 CheckInstallVers10 InstallVersion9
    CheckInstallVers10:
        IntCmp $installVers10 1 InstallVersion10 MainInstallation InstallVersion10  

    InstallVersion8:
        # install plugins...
        SetOutPath $VERS8DIR
        writeUninstaller "${APPNAME} Uninstall.exe"
        GoTo CheckInstallVers9
    InstallVersion9:
        SetOutPath $VERS9DIR
        writeUninstaller "${APPNAME} Uninstall.exe"
        GoTo CheckInstallVers10
    InstallVersion10:
        SetOutPath $VERS10DIR
        writeUninstaller "${APPNAME} Uninstall.exe"

SectionEnd

Upvotes: 2

Views: 1458

Answers (1)

Anders
Anders

Reputation: 101569

You can call WriteUninstaller as many times as you want but you should use the full path name (writeUninstaller "$VERSxDIR\${APPNAME} Uninstall.exe")

You did not post a full script so it is hard to tell what is wrong with the logic (You might want to use LogicLib.nsh so you can do {IF}s) but you should be able to "MessageBox debug" your way to the solution.

One thing you did not talk about that might be relevant is the uninstaller logic. If the 3 uninstallers all do the exact same task then this is not an issue but I'd expect at least a difference in the uninstaller registry registration.

There are two ways to deal with this:

  • Tag data to the end of the uninstaller (or a .ini in the same directory)
  • Use !system to call makensis.exe and generate uninstallers at compile time that you include as normal Files

A different solution that might be relevant for plugins in sub-directories is to use a component page in the uninstaller and only delete the uninstaller when all 3 plugins have been removed...

Upvotes: 5

Related Questions