2011-01-07 7 views
0

Kürzlich haben wir unserem Installer eine Funktion hinzugefügt, die einige Desktop-Shortcuts benötigt, die leicht umbenannt werden müssen (die Versionsnummer wurde dem Namen hinzugefügt). Ich habe Probleme, das Installationsprogramm dazu zu bringen, die alten Verknüpfungen durch die neuen zu ersetzen. Als das Problem anfänglich gemeldet wurde, wurden die neuen Verknüpfungen installiert, aber die alten wurden nicht entfernt. Nachdem ich an dem Problem gearbeitet habe, habe ich ein gemischtes Problem: Einer der alten Verknüpfungen wird entfernt (so weit, so gut), aber der andere ist nicht (nicht so gut), und in beiden Fällen sind die neuen Verknüpfungen werden nicht installiert (noch schlimmer). Ich habe versucht, die GUID für jede der Komponenten, die diese Verknüpfungen installieren, zu ändern, und ich habe sogar einmal versucht, die ProductCode-Eigenschaft in jedem der für die Verknüpfungen zuständigen Merge-Module zu ändern, aber nichts scheint das gewünschte zu bekommen Verhalten (mit dem alten und mit dem neuen beim Upgrade).Wie erzwingen Windows Installer, eine Verknüpfung durch eine umbenannte ersetzen?

Mit nur die relevanten Komponenten re-GUIDed, hier ist, was die Protokolldatei für die Installation zeigt (um mit dem Debuggen zu helfen, habe ich die Komponenten leicht umbenannt, so dass ich sagen kann, welche aus dem alten Build sind und welche von der neu):

... 
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local; Request: Absent; Action: Absent 
... 
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local; Request: Absent; Action: Null 
... 

Wie Sie im Protokoll sehen können, sollten die neuen Verknüpfungen in beiden Fällen gehen in, aber sie sind es nicht. Und ich kann nicht erklären, warum der Installer mit den beiden alten Abkürzungen verschiedene Dinge macht.

FYI: Meine Entwicklungsumgebung ist Wise Installation Studio 7.0.

Bearbeiten: Ich habe alles zurückgesetzt, was es zuvor war, mit Ausnahme der aktuellen ProductVersion und ProductCode. Nachdem dies geschehen ist, lässt das Installationsprogramm die alten Verknüpfungen installiert, installiert aber nicht die neuen. (Dies ist ein anderes Verhalten als das, was ursprünglich gemeldet wurde und das ich kopieren konnte, dh die alten Verknüpfungen wurden installiert und die neuen (umbenannten) wurden ebenfalls installiert.) Nach der erneuten GUID der beiden relevanten Komponenten, dem Installer entfernt die alten Verknüpfungen, installiert aber die neuen nicht. (Dies ist, was auf XP geschieht.)

die entsprechenden Zeilen im Protokoll nach der erneuten Führung der Komponenten sind wie folgt:

... 
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent; Request: Local; Action: Local 
... 
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local; Request: Absent; Action: Absent 
... 
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local; Request: Absent; Action: Absent 
... 

Die ersten beiden Zeilen zu zeigen scheinen, dass die neuen Verknüpfungen zu sein installiert, und doch sind sie nicht. Eine Reparatur danach installiert die neuen Verknüpfungen.

Wenn die Kopie des Installationsprogramms ausgeführt wird, in dem das ursprüngliche Problem (alte und neue Verknüpfungen sind nach einem Upgrade vorhanden) doppelt ausgeführt werden kann, wird in den letzten beiden Zeilen die Aktion Null statt Abwesend gemeldet.

Bearbeiten 2: Das aktuelle Verhalten ist, dass die alten Verknüpfungen installiert bleiben, und die neuen nicht installiert sind. Wenn ich ihre Komponenten neu GUID, werden die alten Verknüpfungen entfernt, und die neuen werden immer noch nicht installiert. Ich habe die Lösungen von Christopher Painter ausprobiert, aber keiner von beiden ging irgendwo hin. (Siehe meinen Kommentar zu dieser Antwort.) Es muss eine Möglichkeit geben, die neuen versionierten Shortcuts anstelle der alten versionslosen Shortcuts zu installieren. Gibt es jemanden da draußen, der eine Lösung anbietet, die funktioniert?

Bearbeiten 3: Wie sich herausstellt, war das neue Verhalten, bei dem die neuen Verknüpfungen nicht installiert wurden, auf einen Fehler zurückzuführen, den ich beim Abrufen der Quelldateien gemacht hatte so aktuell wie die, die ersetzt werden sollten. Sobald die aktuellsten Dateien in das Installationsprogramm kompiliert wurden, konnte ich die gewünschten Ergebnisse erhalten (alte Verknüpfungen, neue Verknüpfungen). (Siehe meine Antwort für weitere Informationen.)

+0

Neuere Windows-Versionen (Vista und höher) verwenden einen Shortcut-Cache. Wenn Sie also versuchen, die Shortcut-Eigenschaften (Name, Symbol usw.) zu ändern, verwendet Windows immer noch die aus dem Cache. Ich bin mir nicht sicher, ob dies für Sie der Fall ist, aber Sie können versuchen, den Computer neu zu starten, nachdem die ursprüngliche Version entfernt wurde. –

Antwort

0

Da wir alles für jeden Umsatz neu versionieren (die Build-Nummer wird immer größer), ist es ein großes Upgrade, soweit WI betroffen ist, also sobald ich die aktuellsten Dateien in die Installation bekommen habe, ReGUIDing der Komponenten, die die Desktop-Verknüpfungen enthalten, die ersetzt werden mussten, brachte die Ergebnisse, nach denen ich suchte.

1

Eine Verknüpfung ist nur eine LNK-Datei in einem Verzeichnis. Sie benennen eine Verknüpfung nicht um, Sie löschen sie und erstellen eine neue Verknüpfung. Wenn Sie ein größeres Upgrade durchführen, sollte das Entfernen/Neuinstallieren dies behandeln, aber wenn Sie ein kleines Upgrade durchführen, wird das alte zurückgelassen, weil das neue MSI davon nicht weiß.

Zwei Möglichkeiten:

1) die RemoveFile Tabelle verwenden, um die alten Abkürzung loszuwerden.

2) Bewahren Sie die alte Komponente mit der alten Datei auf und verwenden Sie das transitive Attribut mit einer no-op-Bedingung (Google, wie Sie eine Datei in geringfügigem Upgrade aka Punktionskomponentenmuster löschen), um die Komponente und ihre Datei/Verknüpfung zu verursachen entfernt werden. Erstellen Sie eine neue Komponente mit einem neuen Dateinamen und einem neuen Verknüpfungsnamen, der installiert werden soll, um die neue Verknüpfung zu erhalten.

Ich denke, ich würde zuerst # 1 versuchen. :-)

+0

Versucht eine Variation von # 1 (muss die Verknüpfung beibehalten, wenn unter bestimmten Bedingungen aktualisiert wird). Ergebnis: Die alte Verknüpfung wurde entfernt, aber die neue Verknüpfung wurde nicht installiert. Habe # 2 versucht, habe aber den internen Fehler 2756 bekommen, ohne dass eine nützliche Log-Datei dafür angezeigt wurde, damit ich nicht sehen kann, was falsch läuft. – RobH

Verwandte Themen