Wie man Windows Installer erzwingt eine Verknüpfung mit einem umbenannten zu ersetzen?

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

  •  30-09-2019
  •  | 
  •  

Frage

Vor kurzem haben wir eine Funktion, um unser Installationsprogramm, das ein paar von den Desktop-Verknüpfungen erforderlich leicht umbenannt werden (die Versionsnummer wurde auf den Namen hinzugefügt). Ich habe Probleme das Installationsprogramm immer die alten Verknüpfungen mit den neuen zu ersetzen. Als das Problem zunächst berichtet, wurden die neuen Verknüpfungen installiert, aber die alten wurden nicht entfernt werden. Nach der Arbeit an dem Problem, habe ich ein gemischtes Problem: Einer der alten Verknüpfungen entfernt wird (so weit, so gut), aber das andere ist nicht (nicht so gut), und in beiden Fällen die neuen Abkürzungen nicht installiert ist (noch schlimmer) wird. Ich habe versucht, auf jede der Komponenten die GUID zu ändern, die diese Verknüpfungen zu installieren, und ich selbst habe, an einem Punkt, versucht, die Eigenschaft Productcode in jedem der Mergemodulen Wechsel verantwortlich für die Verknüpfungen, aber nichts scheint die gewünschte zu erhalten Verhalten (out mit dem alten und innen mit dem neuen als Upgrade).

Mit nur die relevanten Komponenten neu geführt werden, hier ist das, was die Protokolldatei zeigt für die Zustände installieren (um Hilfe bei der Fehlersuche, ich die Komponenten leicht so umbenannt habe, dass ich, welche sind von dem alten Build sagen kann, und die aus den 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 bin an einem Verlust zu erklären, warum der Installer verschiedene Dinge mit den beiden alten Verknüpfungen tut.

Zu Ihrer Information:. Meine dev Umgebung ist Wise Installation Studio 7.0

Edit: Ich habe zurückgesetzt alles, was es war bisher, mit Ausnahme der aktuellen Product und Productcode. Nachdem dies erledigt installiert, dass die Installer Blätter die alten Verknüpfungen aber nicht die neuen installieren. (Dies ist ein anderes Verhalten aus, was ursprünglich berichtet und die ich war in der Lage zu duplizieren, dh die alten Verknüpfungen installiert wurden, links, und die neuen (umbenannt) diejenigen, wurden ebenfalls installiert.) Nach der erneuten Führung der beiden relevanten Komponenten, den Installateur die alten Verknüpfungen entfernt, aber immer noch nicht die neuen installieren. (Dies ist, was auf XP geschieht.)

Die entsprechenden Zeilen im Protokoll nach dem 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 scheinen darauf hinzudeuten, dass die neuen Verknüpfungen installiert werden, und doch sind sie nicht. Eine Reparatur danach werden die neuen Verknüpfungen installieren.

Wenn die Kopie des Installateurs, in dem das ursprüngliche Problem (sowohl alte als auch neue Verknüpfungen existieren nach einem Upgrade) dupliziert werden könnten ausgeführt wird, die Wirkung auf die letzten beiden Zeilen berichtet über ist Null statt abwesend.

Edit 2: Das aktuelle Verhalten ist, dass die alten Verknüpfungen installiert bleiben, und die neuen sind nicht installiert. Als ich ihre Komponenten erneut GUID werden die alten Verknüpfungen entfernt werden, und die neuen sind noch nicht installiert. Ich habe versucht, Christopher Painter-Lösungen, aber auch nicht überall ging. (Siehe meinen Kommentar zu dieser Antwort.) Es muss ein Weg sein, die neuen versioniert Verknüpfungen anstelle der alten unversionierte diejenigen installiert zu bekommen. Gibt es jemand da draußen eine Lösung, die funktioniert bieten kann?

Bearbeiten 3: Wie sich herausstellt, das neue Verhalten, wo die neuen Verknüpfungen wurden nicht installiert zu werden war durch einen Fehler, dass ich in immer die Quelldateien gemacht hatte, und die, die gingen in den Installateur waren bisher nicht so hoch wie diejenigen, die ersetzt werden sollten. Sobald die Dateien auf dem neuesten Stand in den Installer erstellt wurden, konnte ich die gewünschten Ergebnisse (alte Verknüpfungen aus, neue in) erhalten. (Siehe meine Antwort für weitere Informationen).

War es hilfreich?

Lösung 2

Wie wir erneut Version alles für jeden Umsatz (die Build-Nummer ist immer steigend), dann ist es ein wichtiges Upgrade soweit WI betrifft, so, wenn ich die aktuellsten Daten in das Installations bekam, reGUIDing die Komponenten, die enthält die Desktop-Verknüpfungen, dass die Ergebnisse erreicht werden ersetzte muß, dass ich nach.

Andere Tipps

Eine Verknüpfung ist nur eine LNK-Datei in einem Verzeichnis. Sie umbenennen keine Verknüpfung, löschen Sie es und eine neue erstellen. Wenn Sie die Entfernung ein wichtiges Upgrade tun / Neuinstallation sollte damit umgehen, aber wenn Sie eine kleinere Upgrade tun, es wird das alte zurück, weil die neue MSI tut es wissen lassen.

Zwei Möglichkeiten:

1) Verwenden Sie die RemoveFile Tabelle der alten Verknüpfung zu entfernen.

Halten Sie

2) die alte Komponente um mit der alten Datei und verwenden Sie das transitive Attribut mit einem No-Op-Zustand (google, wie eine Datei in kleineren löschen Upgrade aka Einstichkomponentenmuster), um die Komponente zu führen und es der Datei / Verknüpfung zu entfernt werden. Erstellen Sie eine neue Komponente mit einem neuen Dateinamen und neuen Namen für die Verknüpfung installiert werden, um die neue Verknüpfung zu erhalten.

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

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