Какой метод удаления предыдущей версии в другом каталоге в NSIS? - PullRequest
1 голос
/ 22 февраля 2011

Я настраиваю установщик NSIS, чтобы лучше обрабатывать каталоги установки не по умолчанию, и столкнулся с проблемой.

Мой установщик проверяет существующую установку и вызывает существующую деинсталлятор, если она есть, через:

'"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR'

Где $ OLD_INSTDIR - это переменная, которую я создал, заполняемая из записи реестра.Это работает нормально, но я тестировал сценарий, в котором кто-то меняет каталог установки с того места, где находится существующая установка, и заметил, что исполняемый файл деинсталлятора и старый каталог установки не удалены.

Через некоторое времякопаясь, я понимаю, что параметр _? = $ OLD_INSTDIR заставляет установщик работать там, где он есть, а не копироваться во временный каталог.Это объясняет, почему удаление не происходит.

Я пытался явно удалить деинсталлятор и каталог после удаления существующей версии, но у меня это тоже не работает.

ExecWait '$UNINSTALL_OLD_VERSION'
Delete $OLD_INSTDIR/uninstall.exe
RmDir $OLD_INSTDIR

Любые идеи о том, что мне следует делать?Извиняюсь, если это что-то тривиальное, но мое знакомство с NSIS в значительной степени ограничено сборкой установщика из примеров, а затем никогда больше не касаюсь его.

1 Ответ

0 голосов
/ 22 февраля 2011
ExecWait '"$OLD_INSTDIR\uninstall.exe" /S _?=$OLD_INSTDIR'
Delete "$OLD_INSTDIR\uninstall.exe"
RmDir "$OLD_INSTDIR"

_? = Останавливает обычное поведение копирования в% temp%, но также предотвращает удаление деинсталлятора, поэтому вам нужно сначала запустить с _?параметр, а затем удалить деинсталлятор

...