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.

Était-ce utile?

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"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top