Frage

Ich habe ein InstallScript- Projekt von Grund auf neu geschrieben in Install 2010. Es enthält unter anderem drei nativen Installshield-Objekte und vier Installshield Merge-Modul-Halter Objekte, die Wrap-MSM-Dateien.

Als ich das Projekt ursprünglich getestet, es installiert fein auf eine saubere Umwelt, aber wenn ich ein Upgrade auf eine neuere Version versucht, jede der vier Merge-Modul-Halter Objekte „Fehler erzeugt wird, kann 1706 keine gültige Quelle für das Produkt gefunden werden XXXX“-Meldung.

Ich habe im Netz einige graben und fand, dass dies ein Windows Installer-Fehler ist, und es tritt auf, weil die MSI-Datei auf dem Rechner vorhanden sein muss, auch nachdem die Originalmedien installieren ist verschwunden. Der empfohlene Weg, um sicherzustellen, ist die „Cache das MSI-Paket lokal“ Checkbox in dem Merge-Modulträger Objekteigenschaftsdialog ticken.

tickte ich, dass das Feld für alle vier Mergemodulen und erneut getestet, aber das hat das Problem nicht lösen. Ich sah dann, wo diese Mergemodulen tatsächlich auf der Festplatte gesetzt wird. Der Eigenschaftsdialog sagte <DISK1TARGET>, die Entschlüsse zu C:\Program Files\InstallShield Installation Information\ {Product GUID} zur Laufzeit. Mit Blick auf die Testmaschine, schien es, als ob alle vier Mergemodulen an der gleichen Stelle geschrieben haben, damit jeder des anderen MSI-Dateien überschrieben werden.

Um Runde, dass zu bekommen, bearbeiten ich jedes Mergemodul selbst zwischenspeichern zu einem einzigartigen Weg, <DISK1TARGET>\ {Name} . Ich kompilierte und wieder getestet, und ich kann sehen, dass jedes Mergemodul in der Tat selbst zu einem eindeutigen Unterordner ist jetzt speichern. Doch alle sind vier Fehler 1706 Nachrichten noch angezeigt wird, wenn ich ein Upgrade.

Hat jemand eine Idee? Ich bin sicher, ich bin etwas fehlt offensichtlich, aber es scheint nicht überall zu dokumentieren. : -)

UPDATE:

Nach vielen Beiträgen auf Install Foren, scheint es, dass Installshield ein brandneues Produkt GUID für jeden eingebetteten MSI erzeugt jedes Mal, wenn das InstallScript- Projekt baut. Während des Aktualisierungsvorgangs überschreibt der Installshield-Modul jede MSI-Datei auf dem Zielcomputer zwischengespeichert mit der neueren Version, aber wenn es um sie auszuführen kommt, sagt Windows Installer „hey, das ist ein neues Produkt, wo ist die alte MSI Produkt so, dass ich kann es deinstallieren?“, daher die Fehler.

Ist es möglich, Install zu sagen, nicht für jedes Produkt GUID neu generiert auf jedem Build eingebettet MSI? Sicherlich macht dieses Verhalten ein Hohn auf die ganze Idee von Mergemodulen in InstallScript- Projekte Einbettung? : - (

War es hilfreich?

Lösung

Ich habe diese Arbeiten durch:

  1. Beschaffung eigenständigen MSI-Setups auf die MSMs entsprechenden, dass wir schon hatten. Zum Glück war dies möglich, für alle von ihnen.
  2. Einschließlich der MSIs als installierbare Komponenten im InstallScript- Projekt installiert ist, auf einen geeigneten temporären Speicherort auf dem Ziel.
  3. In der entsprechenden <feature>_Installed Ereignis, zu msiexec.exe berappen und die MSI-Datei mit den /i und /qb Schalter ausgeführt werden.
  4. In der entsprechenden <feature>_UnInstalling Ereignis, zu msiexec.exe berappen und die MSI-Datei mit dem /x Schalter ausgeführt werden.

Das fühlt sich ein bisschen „falsch“, aber es funktioniert sehr gut, also bin ich glücklich, es dabei zu belassen, es sei denn jemand eine bessere Idee hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top