Llamar a las funciones previas de MUI en el instalador NSIS, saltando páginas/diálogo en el instalador NSIS
-
27-10-2019 - |
Pregunta
¿Se puede llamar a la función previa de un diálogo MUI solo cuando sea necesario?
!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipComponentsPage
!insertmacro MUI_PAGE_COMPONENTS
Function SkipComponentsPage
Abort
MessageBox MB_OK "You chose to UPDATE your current version"
FunctionEnd
// Esta sección se verificará de forma predeterminada, es decir, el usuario no podrá seleccionar o deseleccionar esta sección, esto debe ejecutarse .......... ¿Cómo hacer esto? Para ocultarlo, yo han incluido un - firma en su nombre. Su nombre es "obligatorio"
Section "-mandatory" SEC_UPDATE
#Do update............
SectionEnd
Tengo dos radiobutton (demostración y actualización) en mi página de diálogo personalizado en el instalador NSIS. Quiero que cuando el usuario elija instalar la actualización (elige la actualización de radiobutton), luego se omite la página de componentes y se revisa y ejecuta una sección especificada.
Pero si el usuario elige instalar el DEM (elige el radiobutton de demostración), entonces la página de componentes no se omite y el usuario puede verificar o desmarcar secciones en esa página de componentes.
Solución
Siempre se llama una devolución de llamada de página, pero puede colocar la lógica dentro de la función:
...
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
Realmente no está claro para mí si desea que el usuario pueda elegir la actualización en el modo de demostración, pero si desea forzar la actualización, solo puede hacer la lectura de la sección:
section "Update" SEC_UPDATE
SectionIn RO
sectionend
(Y elimine la llamada de no selección de la función pre)
... o simplemente haga que la sección sea invisible con el prefijo -name como sugirió.