Aiuto per garantire un programma di avvio automatico viene utilizzato, ma con gli aggiornamenti di lavoro
-
05-10-2019 - |
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?
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.