Talk:Auto-uninstall old before installing new: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
Line 13: Line 13:
       ;now you won't do the above deletion or whatever if the uninstall succeeded.
       ;now you won't do the above deletion or whatever if the uninstall succeeded.
</code>
</code>
== Hans's comments ==
Please correct me if I'm wrong but as far as I know NSIS is not able to perform a "safe/consistent uninstallation" at all.
Scenario:
<code>
  (1) the installer GUI pops up
  (2) the user changes some settings
  (3) but finally the user decides to abort the installation
</code>
Since the installation has been canceled by the user I would expect that the system is left untouched - the old installation is still present.
But if we call the uninstaller in the onInit callback then the old installation is gone.
What NSIS is needs is another callback, e.g. an onPrepareFinished callback or something like that.

Revision as of 06:18, 9 July 2009

Jeff's comments

In the second example, doesn't that assume that the old version's uninstaller is called 'uninst.exe' and that it resides in the same directory we're trying to install the new version into? The first example is using the value stored in the uninstall string key in the registry, which is a more robust way of doing it.

Also, in the first example, shouldn't you have a second parameter to iferrors?

 IfErrors uninstall_failed uninstall_succeeded
   uninstall_failed:
     ;You can either use Delete /REBOOTOK in the uninstaller or add some code
     ;here to remove the uninstaller. Use a registry key to check
     ;whether the user has chosen to uninstall. If you are using an uninstaller
     ;components page, make sure all sections are uninstalled.
   uninstall_succeeded:
     ;now you won't do the above deletion or whatever if the uninstall succeeded.

Hans's comments

Please correct me if I'm wrong but as far as I know NSIS is not able to perform a "safe/consistent uninstallation" at all.

Scenario:

 (1) the installer GUI pops up
 (2) the user changes some settings
 (3) but finally the user decides to abort the installation

Since the installation has been canceled by the user I would expect that the system is left untouched - the old installation is still present.

But if we call the uninstaller in the onInit callback then the old installation is gone.

What NSIS is needs is another callback, e.g. an onPrepareFinished callback or something like that.