Nous avons créé un MSI dans WiX 3.5.2030.0 et ciblant Windows Installer 4.0 (pour le support MSIUSEREALADMINDETECTION
). Nous avons une propriété que nous avons défini dans le MSI pour appliquer l'utilisation d'un programme d'amorçage (je dis « faire respecter », mais il est vraiment « encourager très fortement » bien sûr):Aide pour s'assurer que le bootstrapper est utilisé mais que les mises à niveau fonctionnent
<Property Id="SETUPEXE"
Secure="yes" />
<Condition Message="You must run the MSI through the setup program; you cannot run it directly.">
SETUPEXE = 1
</Condition>
Lorsque nous courons le produit MSI comme nouvelle installation, tout fonctionne. Lorsque nous l'exécutons comme une mise à niveau, cependant, la propriété transmise à l'installateur semble être "perdue" à un moment donné. Le journal affiche les entrées pertinentes suivantes:
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
Je l'ai fait quelques recherches sur ce sujet et regardé le journal en WiLogUtl
et ont au moins compris que Property(N)
indique une propriété « imbriqué », mais je ne sais pas ce que l'imbrication est quand je cours le MSI directement par msiexec
. Ensuite, je ne sais pas pourquoi la propriété imbriquée n'est pas définie correctement lorsque les valeurs client et serveur sont correctes. Comment résoudre ça?
Hmmm - Je viens d'apprendre que les installations imbriquées se produisent lorsqu'une mise à niveau est en cours, ce qui est en fait ce scénario. La désinstallation de la version précédente échoue peut-être. Je pourrais avoir besoin de revoir cette question. –