Как выполнить деинсталлятор NSIS из другого установщика NSIS и дождаться его завершения? - PullRequest
10 голосов
/ 13 января 2011

У меня есть установщик, скомпилированный скрипт NSIS, и он сначала проверяет, запущена ли в системе другая версия моего приложения. Если существует другой экземпляр, он сначала запускает автоматическое удаление, а затем приступает к установке нового экземпляра.

Я использую ExecWait для запуска unistaller в автоматическом режиме, но мой основной процесс установки не ждет и продолжает процесс установки.

Как заставить главный установщик дождаться, пока сначала будет завершено автоматическое удаление?

Ответы [ 2 ]

11 голосов
/ 13 января 2011

Существует специальный деинсталлятор параметр , который необходимо использовать (причина в том, что обычно деинсталлятор должен иметь возможность удалить себя)

ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
7 голосов
/ 07 декабря 2011

Это не просто "ExecWait". Это также о «_?», Специальной инструкции по удалению. На самом деле, во время удаления uninstaller.exe копируется во временный каталог, а затем выполняется оттуда.

Этот шаг копирования и вызова нового деинсталлятора из временного каталога может быть быстрым, и вызов будет возвращен немедленно, фактически не дожидаясь завершения деинсталлятора.

Используя "_?" инструкция вы говорите NSIS для запуска деинсталлятора из того же места, а не из временного каталога.

Используя «ExecWait» в дополнение к «_?» вы говорите NSIS дождаться завершения процесса удаления и возврата. Таким образом, вы достигнете того, что вам нужно.

см. http://nsis.sourceforge.net/Docs/Chapter3.html#3.2.2 для получения дополнительной информации.

...