monetizar - Condición de falla wix
wix installer documentation (1)
NOTA : Necesito verificar las condiciones que se utilizan a continuación correctamente mañana, pero publique lo que tengo para que pueda verlo sin esperar.
Cuando cualquiera de esas tres condiciones "sub" son verdaderas, ¿qué quieres lograr?
- Abortar configuración : ¿Abortar toda la configuración? ( LaunchConditions )
- Configurar características : ¿Prevenir o habilitar la instalación de características específicas? ( Condiciones de la característica )
Esta diferencia es obviamente crucial, y debemos saber para poder responder. Su fragmento de fuente WiX actualmente muestra las condiciones utilizadas como condiciones de función. Tengo la sensación de que esto no es lo que quieres.
LaunchConditions : para cancelar la configuración completa si una de estas condiciones es verdadera, puede intentar usar las entradas de LaunchCondition. En lugar de crear una condición complicada, puede dividirlos en tres entradas diferentes, cada una de las cuales verifica si la configuración debe cancelarse, cada entrada por un motivo diferente y específico. Le sugiero que agregue estas entradas LaunchCondition después de su elemento Package en su archivo fuente WiX:
<Condition Message="Aborting setup: Server OS required for installation.">Installed OR MsiNTProductType=1</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR MYKEY="MyValue"</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR (MYSERVICE="MyService" AND MYKEY="")</Condition>
Estas entradas aparecerán en la tabla LaunchCondition de su archivo MSI compilado.
LaunchConditions siempre debe evaluarse como verdadero para que la configuración pueda instalarse / ejecutarse.
En consecuencia, las partes
Installed
de las condiciones anteriores están ahí para garantizar que la condición sea siempre verdadera después de la instalación, de modo que no tenga la situación de que la configuración no se permitirá desinstalar o reparar porque no se cumple una condición de inicio.
La condición:
Installed
: siempre será cierto, excepto para una
fresh install
y
major upgrades
.
NOTA
: No estoy seguro de si las condiciones de inicio pueden causar problemas durante las instalaciones administrativas.
No creo que lo hagan (una instalación administrativa presenta sus propias secuencias de instalación).
Probaré y verificaré mañana.
Agregar
OR ACTION="ADMIN"
debe hacer que la condición de inicio sea verdadera en cualquier casilla cuando se ejecuta la instalación administrativa.
Condiciones de las características : si no desea cancelar la configuración, sino más bien controlar el estado de instalación de las características basándose en la evaluación de estas condiciones, debe usar el concepto de condiciones de la característica en lugar del concepto de condición de inicio.
Cuando configura el
Feature level
en
0
en su fuente WiX, la función
no se muestra en la GUI de configuración
y tampoco se
instalará de manera predeterminada
.
Una
condición de característica
puede cambiar esto y configurar la característica para que se instale si la condición se evalúa como verdadera.
También puede ir al revés y establecer el nivel de función en 1 por defecto (esto debería instalar la función) y luego usar una condición de función para establecer su nivel de función en 0, si no desea que la función esté instalada, cuando La condición es verdadera.
Hay algunos detalles adicionales en " Maqueta rápida " aquí: WIX If ... otra condición usando el registro .
En el fragmento de WiX a continuación, configuramos una característica para instalar de manera predeterminada (
Level="1"
) y luego usamos una
condición de característica
para establecer que la característica no se instale si su condición asociada se evalúa como verdadera (esta es una condición de varias partes) .
Entonces, una vez que la condición se evalúa como verdadera, asignamos la función
Level="0"
(lo que significa que no instale la función y la oculte de la GUI de configuración):
<Feature Id="MyFeature" Level="1"> <!--Default to install feature-->
<Condition Level="0"> <!--Do not install feature if condition is true-->
((MsiNTProductType=1) OR (MYKEY="MyValue") OR (MYSERVICE="MyService" AND MYKEY="") AND (NOT ACTION="ADMIN"))
</Condition>
</Feature>
La parte
AND (NOT ACTION="ADMIN")
es forzar la instalación de la característica en una instalación administrativa.
Efectivamente, impide que las otras condiciones se evalúen como verdaderas si la configuración se ejecuta en modo de instalación administrativa, lo que provocaría que la característica no se instale durante la instalación administrativa.
Esta última parte la tengo que probar mañana.
ACTUALIZACIÓN : Las pruebas indican que cualquier característica establecida en
Level=0
como predeterminada no se extraerá durante una instalación administrativa, independientemente de las condiciones de la característica que establezcan la característica para instalar. Supongo que la conclusión tentativa es no establecer ninguna característica enLevel=0
, sino establecerLevel=1
y luego establecerlas enLevel=0
con una condición de característica que se evalúe como verdadera. De esta manera, la característica puede estar oculta en una instalación normal, pero todas las características, con los archivos asociados, se extraen durante la instalación del administrador. La parteAND (NOT ACTION="ADMIN")
de la condición parece no ser necesaria. Dejando la muestra de arriba como está por ahora.
Campo de golf:
Estoy tratando de omitir las instalaciones en los siguientes casos:
- El tipo de sistema operativo Windows es = SO de escritorio
- si HKLM / SYSTEM / CurrentControlSet / Services / MyService MYKEY = myValue
- si REG HKLM / SYSTEM / CurrentControlSet / Services / MyService = DisplayName está presente Y HKLM / SYSTEM / CurrentControlSet / Services / MyService MYKEY no está presente
mientras que la instalación fue bien, pero durante la instalación falta mi característica de instalación.
¿Estoy haciendo algo mal al poner la condición?
<Property Id="MYKEY" Secure="yes">
<RegistrySearch Id="MyKey"
Root="HKLM"
Key="SYSTEM/CurrentControlSet/Services/MyService"
Name="mykey"
Type="raw" />
</Property>
<Property Id="MYSERVICE" Secure="yes">
<RegistrySearch Id="MYSERVICE"
Root="HKLM"
Key="SYSTEM/CurrentControlSet/Services/MyService"
Name="DisplayName"
Type="raw" />
</Property>
<Feature Id="MyFeature" Level="" Display="" Title="" Description="" AllowAdvertise="no" ConfigurableDirectory="INSTALLDIR">
<MergeRef Id="MyFeature" Primary="yes"/>
<Condition Level="0">((MsiNTProductType=1) OR
(MYKEY="MyValue") OR
(MYSERVICE="MyService" AND MYKEY=""))</Condition>
</Condition>
</Feature>