Hoe vereis ek dat die gebruiker vorige weergawe met NSIS deïnstalleer
-
23-08-2019 - |
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.
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"