2016-06-23 10 views
0

Wir haben ein Legacy-Installationsprogramm, das mit Wise erstellt wurde, und wir haben eine Situation, in der einige .ASP-Dateien durch entsprechende .INC-Dateien ersetzt wurden. Während der Aktualisierung müssen diese alten ASP-Dateien entfernt werden. Es funktioniert in einem der Verzeichnisse, aber in den beiden anderen Verzeichnissen sind die alten .ASP-Dateien nach dem Upgrade noch vorhanden.Wise Installer entfernt alte Dateien nicht beim Upgrade

Für alle Verzeichnisse auf der Website gibt es einen RemoveFile-Eintrag, der das Installationsprogramm anweist, alle Dateien während der Deinstallation zu entfernen. Daher hätte ich gedacht, dass das Installationsprogramm diese alten Dateien entfernen könnte. aber anscheinend nicht.

In einem Versuch, das Problem zu beheben, fügte ich RemoveFile Einträge, die die spezifischen Dateien bei der Installation entfernen und versuchte das Upgrade erneut, aber selbst das hat nicht funktioniert.

Haben Sie keine Ideen, wie Sie diese Dateien loswerden können?

Antwort

0

Es stellt sich heraus, dass mein Problem war nicht MSI bezogen. Eine der benutzerdefinierten Aktionen in der Installation bestand darin, alle Websitedateien zu sichern, sodass sie später während des Upgrades durch eine andere benutzerdefinierte Aktion wiederhergestellt werden konnten. Dadurch wurden die meisten ASP-Dateien, die entfernt werden sollten, gelöscht zurück. In dem einen Verzeichnis, in dem die alte .ASP-Datei entfernt worden zu sein schien, lag es daran, dass dieses Verzeichnis ausgeblendet war und daher nicht gesichert und daher nicht wiederhergestellt wurde. Zwischen dem Backup und dem Restore hat das MSI seinen Job gemacht und alles aus dem alten Build gelöscht, bevor das neue Zeug installiert wurde. (Zeigt Ihnen, wie lange ich von diesem Projekt weg war, dass ich vergessen habe, dass das passierte. :-()

0

In Windows Installer dreht sich alles um die Komponenten-GUIDs. Wenn Sie 10 Dateien installiert hätten, hätten sie alle einzigartige Komponenten-Guides. Wenn Sie ein größeres Upgrade auf ein Produkt durchführen, das fünf dieser Dateien nicht mehr benötigt und fünf andere ersetzt, dann werden natürlich nicht die alten Dateien in das Upgrade eingefügt, sondern Sie fügen diese fünf neuen Dateien mit fünf neuen Komponenten-GUIDs hinzu. Mit anderen Worten, die Symptome deuten darauf hin, dass Sie neue Dateien hinzugefügt, aber die vorhandenen Komponenten-Guides behalten haben. Ein Haupt-Upgrade beinhaltet eine Deinstallation des alten Produkts, aber die Verwendung der gleichen Komponenten-GUIDs führt zu einer ref-Zählung für die GUID, die niemals null wird, um diese Komponenten (und damit die Dateien) zu deinstallieren.

Wenn die Komponente jemals als permanent markiert wurde oder die Dateien jemals als freigegeben markiert wurden, werden die Dateien nicht entfernt. Das Markieren der Komponente permanent klebt es an das System, so dass das MSI neu erstellt wird und es nicht dauerhaft markiert wird, repariert es nicht. Die Komponente hat eine zusätzliche Zählung. Wenn eine Datei explizit als "shared" gekennzeichnet ist, bedeutet dies, dass sie über eine nicht MSI-Installation installiert werden kann (und nicht als Komponente guid ref gezählt wird), sodass in SharedDlls in der Registrierung ein Eintrag vorhanden ist, da MSI mitgeteilt wurde, dass es sich um eine andere handelt Nicht-MSI-Client. SharedDlls kann in der Registrierung gesucht werden, um zu sehen, ob das passiert ist. Die Ref-Zählung einer Komponente ist schwieriger zu ermitteln, aber ein ausführliches Protokoll der Aktualisierung würde helfen. Das VB-Script zeigt alle installierten Komponenten und die Produkte, die sie verwenden:

Option Explicit 
Public installer, fullmsg, comp, a, prod, fso, pname, ploc, pid, psorce

Set fso = CreateObject("Scripting.FileSystemObject") Set a = fso.CreateTextFile("comps.txt", True)

' Connect to Windows Installer object Set installer = CreateObject("WindowsInstaller.Installer") a.writeline ("MSI Components") on error resume next For Each comp In installer.components a.writeline (comp & " is used by the product:") for each prod in Installer.ComponentClients (comp) pid = installer.componentpath (prod, comp) pname = installer.productinfo (prod, "InstalledProductName") a.Writeline (" " & pname & " " & prod & "and is installed at " & pid) Next Next

enter code here
+0

Was ist mit kleineren Upgrades.Wie ich schon sagte, in einem der 3 Verzeichnisse, in denen .ASP-Dateien mit ersetzt wurden Entsprechende .INC-Dateien, die .ASP-Datei (in diesem Fall nur eine) wurde während des Upgrades entfernt, während in den beiden anderen Verzeichnissen keine der ASP-Dateien entfernt wurde. In allen 3 Fällen wurden die Dateieinträge von a In einem der Fälle, die nicht funktionierten und in dem Fall, der nicht funktionierte, änderte sich der Komponentenname nicht, und eine andere Datei war die Schlüsseldatei. Im dritten Fall änderte sich der Komponentenname, weil es solche gab nur 2 .ASP ->. INC-Dateien im Ordner. – RobH

+0

Und keiner der GUIDs für diese 3 Komponenten geändert. Übrigens, ich müde, Ändern der GUIDs der beiden Komponenten, wo die Entfernung der alten .ASP-Dateien nicht Arbeit, und das Ergebnis war die gleich; das alte .ASP-Dateien sind geblieben. – RobH