Программа удаления NSIS не запускает un.onInit

В моем файле.nsi у меня есть следующая логика в un.onInit функция:

Function un.onInit

  MessageBox MB_YESNO "This will uninstall. Continue?" IDYES checkRunning
  checkRunning:
    FindProcDLL::FindProc "app.exe"
    IntCmp $R0 1 0 notRunning
    MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PRODUCT} is running, please close it so the installation can proceed." /SD IDCANCEL IDRETRY checkRunning
    Abort

  notRunning:
    !insertmacro Init "uninstaller"
FunctionEnd

Однако messageBox (а процесс запускает сообщение) никогда не отображается. Итак, я просмотрел много документации и, по-видимому, запуск режима без вывода сообщений предотвращает вызов этого метода SilentInstall normal а также SilentUnInstall normal в файл.nsi. Однако это тоже не работает.

Я попытался вызвать деинсталлятор, вручную перейдя к uninstall.exe и запустив инсталлятор, который проверяет, установлена ​​ли уже версия и есть ли вызов:

uninst:
    ClearErrors
    ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" "UninstallString"
    StrCmp $R0 "" done
    Abort

Тем не менее, оба эти вызова не запускаются в "нормальном" режиме. Итак, как я могу получить функцию un.onInit для вызова?

Редактировать:

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

1 ответ

Решение

После обновления MUI2 (Modern User Interface 2.0), перехода на NSIS 2.5 и использования плагина NsProcess, я заработал. Теперь вызывается функция, и моя проверка работает с использованием нового плагина. Плагин FindProcDLL не работает на NSIS > 2,46

Другие вопросы по тегам