Vra

Ek het pas begin gebruik NSIS.
Dit werk baie goed, maar ek vind die dokumentasie 'n bietjie ongestruktureerd.Hoe vereis ek dat die gebruiker vorige weergawe deïnstalleer voordat ek 'n nuwe weergawe installeer NSIS?

NSIS (Nullsoft Scriptable Install System) is 'n oopbronstelsel om Windows-installeerders te skep.

Was dit nuttig?

Oplossing

NSIS is 'n groot Windows Installer. Hier is hoe ek gebruik NSIS om die huidige weergawe te verwyder terwyl die installering van 'n nuwe weergawe van dieselfde aansoek. Voeg die volgende funksie om jou NSIS script.

Function .onInit

         Exec $INSTDIR\uninst.exe 

FunctionEnd

Verder kan jy kyk na hierdie skakel op die NSIS wiki op "Auto-verwyder ou voor die installering van nuwe ".

Ander wenke

'n Ander benadering is om 'n UninstallPrevious verborge artikel maak en maak dit hardloop voor alle ander afdelings in die installeerder. Ek stel ook voor die maak van die uninstaller loop in stilte.

; 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

Die voordeel van hierdie benadering is dat die gebruiker die ou weergawe nie sal verwyder totdat hulle is gereed om die nuwe weergawe te installeer. Verder het hulle nie eens 'n besluit te neem oor die verwydering van die ou weergawe, is dit net mettertyd verdwyn.

Natuurlik, afhangende van jou behoeftes, kan jy die gebruiker in staat om te bevestig die verwydering, in welke geval gebruik benadering die spinner_den se.

Ek hergebruik die UninstallString of QuietUninstallString registersleutels wat tydens die installasie geskryf word om later die deïnstalleerder-opdrag te bepaal.

'n Paartjie definieer boaan:

!define PROJECT_REG_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROJECT_NAME}"
!define PROJECT_UNINSTALL_EXE "uninstall.exe"

In die installeerder 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'

En dan in jou .onInit gryp die registersleutelwaarde (sou bestaan ​​​​as jou toepassing reeds op hierdie manier geïnstalleer is) en voer dit uit:

${If} ${Silent}
    ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString"
${Else}
    ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString"
${EndIf}
ExecWait "$R0"
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top