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
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
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