Программа удаления 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