Как вызвать раздел из метки, используемой в функции в NSIS?

#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 не ожидает удаления программы удаления.