Aiuto per garantire un programma di avvio automatico viene utilizzato, ma con gli aggiornamenti di lavoro

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

Domanda

Abbiamo un MSI che abbiamo creato in WiX 3.5.2030.0 e il targeting di Windows Installer 4.0 (per il supporto MSIUSEREALADMINDETECTION). Noi abbiamo una proprietà che abbiamo definito nel MSI per imporre l'uso di un programma di avvio automatico (dico "rispettare" ma è davvero "molto incoraggiare fortemente", naturalmente):

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

Quando si corre il prodotto MSI come una nuova installazione, tutto funziona. Quando si esegue come un aggiornamento, tuttavia, la proprietà passò a al programma di installazione sembra essere "perso" a un certo punto. Gli spettacoli di registro le seguenti voci rilevanti:

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

Ho fatto qualche ricerca su questo e guardato il registro nel WiLogUtl e hanno almeno capito che Property(N) indica una proprietà "annidata", ma io non so cosa la nidificazione è quando sto correndo direttamente il MSI attraverso msiexec. Poi, non so il motivo per cui la proprietà nidificato non è impostato correttamente quando i valori di client e server siano corretti. Come posso risolvere questo?

È stato utile?

Soluzione

mi piacerebbe pensare di cambiare tale condizione (o simili a seconda del caso d'uso)

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

I fare una cosa simile (InstallShield setup.exe passa una proprietà SETUPEXEDIR per impostazione predefinita) e non è una cosa orribile da fare se si vuole assicurarsi che il proprio installatore è stato eseguito attraverso il programma di avvio automatico per garantire prereqs hanno avuto la possibilità di essere installato . Ma per manutenzione / riparazione / scenari di disinstallazione che probabilmente non si vuole richiedere il setup.exe da eseguire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top