#installation #nsis
#установка #nsis
Вопрос:
Я сравниваю проверку версии в функции, вызванной .При запуске, если эта проверка версии показывает, что на компьютере установлена более старая версия, я бы хотел удалить более старую версию. Как этого добиться?? мой метод заключается в том, что если присутствует более старая версия, то messagebox отображает, что у вас установлена более старая версия, нажмите ok, чтобы установить новую версию, или cancel, чтобы продолжить работу со старой версией. IDOK ok IDCANCEL cancel ok: ExecWait деинсталлирует; выполняет uninstall.exe отмена: прервать; продолжить со старой версией.
проблема здесь в том, что ExecWait выполняется параллельно с установкой более новой версии. (оба r становятся двумя различными потоками)
для этого я хотел включить только раздел Uninstall внутри метки функции, чтобы удалить его автоматически.
Пожалуйста, подскажите мне, как вызвать раздел из функции.
Заранее спасибо
Ответ №1:
Вы не можете вызвать раздел, но вы можете сделать это:
Function MySectionCode
# My code goes here
FunctionEnd
Function .onInit
call MySectionCode
FunctionEnd
Section "MySection"
call MySectionCode
SectionEnd
И просто для ясности, ExecWait всегда ожидает дочерний процесс, но иногда дочерний процесс запускает своих дочерних процессов и не ожидает их. Чтобы дождаться удаления NSIS, вам нужно использовать специальный параметр_?=.
Комментарии:
1. _?= параметр принимает значение $INSTDIR, но $ INSTDIR отличается для каждой версии, возможно, из-за этого Exec не ожидает удаления программы удаления.