Вызов предварительных функций MUI в установщике NSIS, пропуски страниц/диалогов в NSIS Установщик
-
27-10-2019 - |
Вопрос
Можно ли вызвать предварительную функцию диалога MUI только тогда, когда это необходимо?
!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage
!insertmacro MUI_PAGE_COMPONENTS
Function SkipComponentsPage
Abort
MessageBox MB_OK "You chose to UPDATE your current version"
FunctionEnd
// Этот раздел будет проверять по умолчанию, то есть пользователь не сможет выбрать или не определить этот раздел, это должно быть выполнено .......... Как это сделать? Чтобы скрыть его, я Включили подпись в его название. его название «обязательно»
Section "-mandatory" SEC_UPDATE
#Do update............
SectionEnd
У меня есть два Radiobuttons (Demo & Update) на моей странице «Пользовательский диалог» в установщике NSIS. Я хочу, чтобы, когда пользователь решил установить обновление (выбрала RadioButton обновления), то страница компонентов пропускается, и указанный раздел проверяется и выполняется.
Но если пользователь предпочитает установить DEM (выбирает демонстрационную радиообучу), то страница компонентов не пропущена, и пользователь может проверять или снять разделы на этой странице компонента.
Решение
Всегда называется обратный вызов страницы, но вы можете поместить логику в функцию:
...
section "" SEC_UPDATE
sectionend
Function SkipComponentsPage
!insertmacro UnSelectSection ${SEC_UPDATE} ; Don't include update with demo by default?
${If} $InstallType == UPDATE
!insertmacro SelectSection ${SEC_UPDATE}
Abort
${EndIf}
Functionend
Мне не совсем ясно, если вы хотите, чтобы пользователь мог выбрать обновление в демонстрационном режиме, но если вы хотите заставить обновление, вы можете сделать только раздел.
section "Update" SEC_UPDATE
SectionIn RO
sectionend
(И удалите вызов невыполнения из предварительной функции)
... или просто сделайте раздел невидимым с префиксом -name, как вы предложили.