Aide à assurer un programme d'amorçage est utilisé, mais ayant des mises à niveau travail
-
05-10-2019 - |
Question
Nous avons un MSI que nous avons écrit dans WiX 3.5.2030.0 et le ciblage Windows Installer 4.0 (pour le support de 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):
<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 MSI produit comme une nouvelle installation, tout fonctionne. Quand nous courons comme une mise à niveau, cependant, la propriété passa à l'installateur semble être « perdu » à un moment donné. Les spectacles du journal 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
J'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 suis en cours d'exécution directement MSI par msiexec
. Alors, je ne sais pas pourquoi la propriété imbriqué n'est pas correctement lorsque les valeurs client et serveur sont corrects. Comment puis-je résoudre ce problème?
La solution
J'envisager de changer cette condition (ou similaire en fonction de votre cas d'utilisation)
<Condition Message="Blah blah blah">SETUPEXE or Installed</Condition>
Je fais même chose (InstallShield setup.exe passe une propriété SETUPEXEDIR par défaut) et ce n'est pas une chose horrible à faire si vous voulez vous assurer que votre installateur a été exécuté par le programme d'amorçage pour assurer prereqs avaient une chance d'être installé . Mais pour l'entretien / réparation / scénarios de désinstallation vous ne voulez probablement pas exiger que le setup.exe à exécuter.