Я настраиваю установщик 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 в значительной степени ограничено сборкой установщика из примеров, а затем никогда больше не касаюсь его.