NSIS - заставить пользователя выбрать другой каталог - PullRequest
4 голосов
/ 09 декабря 2011

До сих пор я выяснил, как обнаружить предыдущую установку моего программного обеспечения, прочитав ключи реестра и проверив, существует ли каталог.(Оба хорошо документированы в справочном файле NSIS).Теперь я хочу заставить пользователя указать другой каталог, если приложение уже установлено.(Не хочу принудительно удалять самостоятельно, потому что предыдущие версии просто удаляют все, включая сохраненные данные.)индикатор прогресса и т. д. Как добавить проверку на этом этапе в процессе установки?

Обновление - Попробовал решение Пола, но оно не работает.В верхней части скрипта я объявил

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE validateDirectory
!insertmacro MUI_PAGE_DIRECTORY

для ссылки на эту функцию:

Function validateDirectory
ReadRegStr $R0 HKLM "SOFTWARE\Aadhaar Enrolment Client" "Installdir"
Pop $R0
StrCmp $R0 $OUTDIR +1 +3
MessageBox MB_ICONSTOP|MB_OK 'The directory $OUTDIR already exists.Please choose a different directory.'
Abort
FunctionEnd

Эта функция отображает сообщение, но не прерывает его.Более того, если я нажму кнопку «Назад» на странице выбора каталога и снова нажму кнопку «Вперед», она просто продолжит установку.

1 Ответ

5 голосов
/ 09 декабря 2011

Вам нужно указать функцию «Выйти» для страницы каталога, как это

!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveDirectory
!insertmacro MUI_PAGE_DIRECTORY

, и это вызовет функцию, указанную при нажатии кнопки «Далее».

Затем создайте функцию LeaveDirectory с логикой, необходимой для проверки выбранного каталога, и, если каталог определен как недействительный, просто вызовите Abort в функции, и установщик не перейдет к следующему шагу.

Документация находится на этой странице в разделе «Пользовательские функции», но, поскольку вы должны расширить заголовок «Пользовательские функции страницы», к сожалению, это не очевидно.

...