Comment puis-je désinstaller require user version précédente avec NSIS
-
23-08-2019 - |
Question
Je viens de commencer à utiliser NSIS .
Il fonctionne très bien, mais je trouve la documentation un peu non structurées.
Comment puis-je désinstaller require user version avant d'installer une nouvelle version avec NSIS ?
NSIS (Nullsoft Scriptable Install System) est un système open source pour créer des installateurs Windows.
La solution
NSIS est un grand Windows Installer. Voici comment j'utilise NSIS pour désinstaller la version actuelle lors de l'installation d'une nouvelle version de la même application. Ajoutez la fonction suivante à votre script NSIS.
Function .onInit
Exec $INSTDIR\uninst.exe
FunctionEnd
Vous pouvez aussi consulter ce lien sur le wiki NSIS sur « vieux Auto-désinstallation avant l'installation de nouveaux ».
Autres conseils
Une autre approche est de faire une partie cachée de UninstallPrevious
et le faire tourner avant toutes les autres sections du programme d'installation. Je suggère aussi de faire le programme de désinstallation exécutée en mode silencieux.
; 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 '"$R0\Uninstall.exe /S"'
Done:
FunctionEnd
L'avantage de cette approche est que l'utilisateur ne sera pas désinstaller l'ancienne version jusqu'à ce qu'ils soient prêts à installer la nouvelle version. De plus, ils ne sont même pas prendre une décision sur la désinstallation de l'ancienne version, il disparaît comme par magie.
Bien sûr, en fonction de vos besoins, vous pouvez l'utilisateur de confirmer la désinstallation, auquel cas utiliser l'approche du spinner_den.
Je réutilise les clés de Registre UninstallString
ou QuietUninstallString
qui sont écrits lors de l'installation pour déterminer plus tard, la commande uninstaller.
Un couple définit en haut:
!define PROJECT_REG_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROJECT_NAME}"
!define PROJECT_UNINSTALL_EXE "uninstall.exe"
Dans le programme d'installation Section
:
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" _?=$INSTDIR'
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" /S _?=$INSTDIR'
Et puis dans votre .onInit
saisir la valeur de la clé (existerait si votre application a déjà été installée cette façon) et exécutez-le:
${If} ${Silent}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString"
${Else}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString"
${EndIf}
ExecWait "$R0"