Domanda

Ho un progetto di InstallScript scritto da zero in InstallShield 2010. Esso contiene, tra le altre cose, tre oggetti InstallShield nativi e quattro Holder modulo di unione oggetti InstallShield che avvolgono i file MSM.

Quando ho inizialmente provato il progetto, ha installato bene su un ambiente pulito, ma quando ho provato l'aggiornamento a una versione più recente, ciascuno dei quattro Merge Titolare modulo oggetti prodotti un "Errore 1706. Nessuna origine valida può essere trovato per il prodotto XXXX" messaggio.

Ho fatto qualche ricerca in rete e ho trovato che questo è un errore di Windows Installer, e si verifica perché il file MSI deve esistere sulla macchina, anche dopo l'originale installazione multimediale è andato. Il metodo consigliato per garantire che è quello di spuntare la "cache il pacchetto MSI localmente" casella di controllo nella finestra di dialogo Proprietà portaoggetti modulo di unione.

I spuntata quella scatola per tutti e quattro i moduli di unione e ri-testato, ma questo non ha risolto il problema. Poi ho guardato in cui questi moduli di unione sono stati effettivamente messi sul disco rigido. La finestra di dialogo Proprietà detto <DISK1TARGET>, che si risolve a C:\Program Files\InstallShield Installation Information\ {prodotto GUID} in fase di esecuzione. Guardando la macchina di prova, sembrava come se tutti e quattro i moduli di unione scrivevano nello stesso posto, sovrascrivendo così l'un l'altro i file MSI.

Per ovviare a questo, ho curato ogni modulo di unione per memorizzare nella cache stessa per un percorso unico, <DISK1TARGET>\ {Nome} . Ho compilato e testato ancora una volta, e posso vedere che ogni modulo di unione fa la società infatti si salva in una sottocartella unico. Tuttavia, tutti e quattro i Errore 1706 messaggi sono ancora che appare quando aggiorno.

Qualcuno ha qualche idea? Sono sicuro che mi manca una cosa ovvia, ma non sembra essere documentata da nessuna parte. : -)

UPDATE:

Secondo un sacco di messaggi su forum InstallShield, sembra che InstallShield genera un nuovo marchio GUID prodotto per ogni MSI integrato ogni volta si costruisce il progetto InstallScript. Durante il processo di aggiornamento, il motore InstallShield sovrascrive ogni file MSI memorizzato nella cache sul computer di destinazione con la versione più recente, ma quando si tratta di eseguirli, Windows Installer dice "hey, questo è un nuovo prodotto, dove è MSI del vecchio prodotto in modo che io possibile disinstallarlo?", da qui l'errore.

E 'possibile dire InstallShield di non ri-generare il GUID prodotto per ciascuna incorporato MSI su ogni costruzione? Sicuramente questo comportamento si fa beffe di tutta l'idea di incorporare moduli di unione in progetti InstallScript? : - (

È stato utile?

Soluzione

Ho ottenuto questo lavoro da:

  1. Ottenere standalone setup MSI corrispondenti ai MSMs che abbiamo già avuto. Fortunatamente questo è stato possibile per tutti loro.
  2. Compreso il MSI come componenti installabili nel progetto InstallScript, installati in una cartella temporanea adatta sul bersaglio.
  3. In caso <feature>_Installed rilevante, sborsare per msiexec.exe ed eseguire il file MSI con i /i e /qb interruttori.
  4. In caso <feature>_UnInstalling rilevante, sborsare per msiexec.exe ed eseguire il file MSI con l'interruttore /x.

Questo si sente un po ' "sbagliato", ma funziona molto bene, quindi sono felice di lasciare le cose come stanno, a meno qualcuno ha qualche idea migliore.

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