¿Cómo establecer una casilla de verificación en "desactivado" de la línea de comandos MSIEXEC?

StackOverflow https://stackoverflow.com/questions/2992006

  •  24-10-2019
  •  | 
  •  

Pregunta

Tengo un MSI (autor con WIX) que tiene una casilla de verificación vinculada a una propiedad personalizada (llámelo My_Property). Me gustaría ejecutar este MSI desde la línea de comando, especificando 0 (sin verificar) o 1 (marcado) para esta propiedad. Mi script determinará el valor apropiado (basado en el entorno) e inyectará ese valor en la línea de comandos MSIEXEC. Mi línea de comando se parece a esto:

msiexec /i my_installer.msi MY_PROPERTY=$value

Donde el valor $ es 1 o 0, dependiendo del entorno. El problema es que no importa qué valor proporcione para my_property en la línea de comando, la casilla de verificación siempre se verifica (y la propiedad siempre se establecerá en 1). La única forma de hacer que la casilla de verificación no sea marcada es no especificar la propiedad (dejarla indefinida). Cabe señalar que este comportamiento ocurre independientemente de si la interfaz de usuario está mostrando o no (agregar "/silencio" a la línea de comando anterior no cambia este comportamiento).

Esta publicación msdn Parece indicar que este es un "error" conocido en el instalador de Windows (o con mayor precisión, cualquier sistema de autoría escribió el MSI). Se propone un truco MSI posterior a la construcción como solución. Me pregunto si alguien ha encontrado este problema y ha encontrado una mejor solución/solución. ¡Gracias!

Actualizar

Veo tres soluciones a este problema:

  1. Desde @Damien, haga que el script de envoltura no pase la propiedad a MSIEXEC cuando su valor es 0. Esto hace que el script sea más complejo y probablemente me impediría que pueda anular el valor de una casilla de verificación que predeterminada a "marcado".
  2. De @Michael Urman, agregue una acción personalizada que borre la propiedad si su valor es cero. Esto hace que el MSI sea más complejo, y tendría que agregar una acción tan personalizada para cada casilla de verificación en la interfaz de usuario.
  3. Otra idea es simplemente rechazar el uso de casillas de verificación en nuestros instaladores de MSI y usar cuadros de radio o desplegables para preguntas "verdaderas/falsas". Si bien esto restringe las opciones de IU para nuestros instaladores, permitirá que los scripts de envoltura sigan siendo simples, y no requiere acciones personalizadas para "hackear" las propiedades.

Actualmente me estoy inclinando hacia la opción 3, aunque la opción 1 es probablemente la mejor respuesta a mi pregunta original. ¿Alguna idea?

¿Fue útil?

Solución

Así es como se supone que funciona, básicamente, la propiedad no existe hasta que un usuario verifique la casilla de verificación, luego está "configurado" (existe). Entonces, si desea realizar una acción personalizada cuando se verifica una casilla de verificación, prueba la existencia de la propiedad como condición para ejecutar la acción personalizada, en lugar de verificar el valor al que se establece el accesorio personalizado.

Creo que la mejor manera de manejar esto desde la línea de comando es lo que ya ha mencionado: si desea que se seleccione la casilla de verificación, especificando el accesorio personalizado en la línea de comando, de lo contrario, no y la casilla de verificación no se seleccionará.

Otros consejos

Como ha descubierto, las casillas de verificación son verdaderas (marcadas) cuando la propiedad está definida (no blank) y falsa (sin control) cuando la propiedad está indefinida (en blanco). Parece que necesita convertir una cadena de entorno 1 o 0 en una casilla de verificación Verdadero/Falso, donde el 1 o 0 se pasa en la línea de comando. Intente usar una acción personalizada Set-Property que establezca su propiedad en {} (en blanco) con una condición de cuándo la propiedad ya está "0". Programarlo temprano en la interfaz de usuario de instalación e instalar secuencias de ejecución.

Actualización tardía: Con respecto a la necesidad de múltiples acciones personalizadas para manejar esto para múltiples casillas de verificación, tiene una opción. Puede crear múltiples acciones de propiedad de conjunto (beneficio: fácil de saber qué están haciendo; costo: muchos de ellos), o puede crear una acción personalizada única que camina el Checkbox mesa para una lista de propiedades para convertir de 0 en blanco (beneficio: una acción; costo: mal documentado, código personalizado). Una ventaja secundaria para el último enfoque es que puede manejar inusual Value Configuración, tal casilla de verificación que debe establecer la propiedad en 0 Cuando se revise.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top