Pregunta

Tenemos un MSI que hemos escrito en WiX 3.5.2030.0 y la orientación de Windows Installer 4.0 (para el apoyo MSIUSEREALADMINDETECTION). Tenemos una propiedad que hemos definido en el MSI para hacer cumplir el uso de un programa previo (digo "hacer cumplir" pero es realmente "muy fuertemente alentar", por supuesto):

<Property Id="SETUPEXE"
          Secure="yes" />
<Condition Message="You must run the MSI through the setup program; you cannot run it directly.">
  SETUPEXE = 1
</Condition>

Al ejecutar el MSI producido como una nueva instalación, todo funciona. Cuando se corre como una actualización, sin embargo, la propiedad pasó en al instalador parece estar "perdido" en algún momento. Los espectáculos de registro de las siguientes entradas pertinentes:

MSI (s) (2C:8C) [11:27:41:648]: Command Line: SETUPEXE=1 <other properties>

MSI (s) (2C:8C) [11:27:43:055]: PROPERTY CHANGE: Adding SETUPEXE property. Its value is '1'.

MSI (s) (2C:CC) [11:28:11:038]: PROPERTY CHANGE: Adding NETFRAMEWORK20INSTALLROOTDIR property. Its value is 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\'.
Action ended 11:28:11: AppSearch. Return value 1.
MSI (s) (2C:CC) [11:28:11:147]: Doing action: LaunchConditions
Action start 11:28:11: LaunchConditions.
MSI (s) (2C:CC) [11:28:33:662]: Product: <product> -- You must run the MSI through the setup program; you cannot run it directly.

Action ended 11:28:33: LaunchConditions. Return value 3.
Action ended 11:28:33: INSTALL. Return value 3.

Property(N): SETUPEXE = 0

Property(N): SecureCustomProperties = NETFRAMEWORK20INSTALLROOTDIR;NETFRAMEWORK35;NETFRAMEWORK35_SP_LEVEL;NEWERVERSIONDETECTED;OLDERVERSIONBEINGUPGRADED;SETUPEXE

Property(S): SecureCustomProperties = NETFRAMEWORK20INSTALLROOTDIR;NETFRAMEWORK35;NETFRAMEWORK35_SP_LEVEL;NEWERVERSIONDETECTED;OLDERVERSIONBEINGUPGRADED;SETUPEXE

Property(S): SETUPEXE = 1

He hecho algunas búsquedas en esto y mirado el registro en WiLogUtl y tener al menos descubrió que Property(N) indica una propiedad "anidada", pero no sé lo que la anidación es cuando estoy corriendo el MSI directamente a través de msiexec. Entonces, no sé por qué la propiedad anidada no se establece correctamente cuando los valores de cliente y servidor son correctos. ¿Cómo puedo solucionar esto?

¿Fue útil?

Solución

Lo consideraría cambiar esa condición a (o similar dependiendo de su caso de uso)

<Condition Message="Blah blah blah">SETUPEXE or Installed</Condition> 

hacer una cosa similar (InstallShield setup.exe pasa una propiedad SETUPEXEDIR por defecto) y que no es una cosa horrible que hacer si desea asegurarse de que el instalador se ejecuta a través del programa previo para asegurar prereqs tuvieron la oportunidad de ser instalado . Sin embargo, para mantenimiento / reparación / desinstalación escenarios es probable que no quieren exigir al setup.exe para ser ejecutado.

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