Aide à assurer un programme d'amorçage est utilisé, mais ayant des mises à niveau travail

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

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top