Другой подход - создать скрытый раздел UninstallPrevious
и запустить его перед всеми остальными разделами в установщике. Я также предлагаю заставить программу удаления работать без вывода сообщений.
; 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
Преимущество этого подхода состоит в том, что пользователь не удалит старую версию, пока не будет готов установить новую версию. Более того, им даже не нужно принимать решение об удалении старой версии, она просто волшебным образом исчезает.
Конечно, в зависимости от ваших потребностей, вы можете захотеть, чтобы пользователь подтвердил удаление, и в этом случае используйте подход spinner_den.