Wie finde ich den Upgrade-Code für eine installierte MSI-Datei?

8

In bestimmten Fällen kann das Abrufen von MSI-Upgrade-Codes für bereitgestellte Pakete erfolgen.

Häufige Szenarien:

  • Ich habe das MSI-Projekt eines anderen übernommen und muss herausfinden, welche Upgrade-Codes für frühere Versionen verwendet wurden, die bereits frei sind. Dies ist erforderlich, um Upgradeszenarien zu behandeln. Ich habe nirgendwo ein Archiv von Veröffentlichungen .
  • Ich habe den Upgrade-Code für mein WiX-Paket während der Entwicklung versehentlich mehrmals geändert und ich muss alle Upgrade-Code-Versionen "in freier Wildbahn" finden. Ich war mir nicht bewusst, dass Upgrade-Codes zwischen den Versionen stabil bleiben sollten.

Dies ist eine Q / A-Stilfrage .

Diese Frage ist schon in verschiedenen Inkarnationen auftaucht, aber das ist kein Duplikat . Ich poste einen Weg, es zu tun, der die MSI Hauptautomatisierungsschnittstelle (oder streng genommen WMI) benutzt. Es sollte zuverlässiger sein als registrierungsbasierte Ansätze aus früheren Antworten. Diese Antwort versucht auch, andere Suchansätze zusammenzufassen.

    
Stein Åsmul 08.10.2017, 23:35
quelle

1 Antwort

11

MSI Upgrade Code-Abfrage (über PowerShell / WMI)

Das PowerShell-Skript unten sollte alle verwandten Produktcodes , Upgrade-Codes und Produktnamen auf Ihrem installieren Maschine (Tabellenausgabe).

Screenshot von Ausgabe (vollständiges Skript unten):

Dies sind die echten, aktiven Werte direkt von der Windows Installer-Datenbank auf dem betreffenden Computer. Es besteht keine Notwendigkeit für eine Konvertierung oder Interpretation. Wir gehen durch die richtigen APIs.

Technischer Hinweis! : Beachten Sie, dass das direkte Überprüfen von Eigenschaften in Ihrer ursprünglichen MSI-Datei (Eigenschaftentabelle) oder WiX-Quelldatei möglicherweise nicht mit den tatsächlich installierten Werten übereinstimmt, da Eigenschaften bei der Installation über <überschrieben werden können a href="https://www.symantec.com/connect/articles/about-transforms"> transformiert (weitere Informationen unten) - oder Eigenschaftswerte, die in der Befehlszeile angegeben sind. Die Moral der Geschichte: Holen Sie sich Eigenschaftswerte direkt aus dem System, wenn Sie können.

  

Schneller Haftungsausschluss : In seltenen Fällen kann das Ausführen des Skripts eine Selbstreparatur des Windows Installers auslösen. Lesen Sie mehr in "Haftungsausschluss"   unten. Nur ein potenzielles Ärgernis, aber lesen Sie den Disclaimer bitte.

Als Exkurs gibt es auch einen einzeiligen PowerShell-Befehl , der nur Produktcodes und Aktualisierungscodes abruft - ohne den Paketnamen. Dies könnte für einige Benutzer tatsächlich ausreichen (ich würde das vollständige Skript unten jedoch empfehlen). Es gibt einen Screenshot der Ausgabe dieses Einzeilers in einem Abschnitt unten. Hinweis : Dieser Befehl erscheint viel schneller als das größere Skript (das Feld "Value" ist der Upgrade-Code). Beachten Sie auch: Produkt-Codes ohne zugehörige Upgrade-Codes werden nicht angezeigt, soweit ich das beurteilen kann - sie werden im größeren Skript:

%Vor%

Um das gesamte folgende PowerShell-Skript auszuführen:

  1. PowerShell starten ( Halten Sie die Windows-Taste gedrückt, tippen Sie auf R, lassen Sie die Windows-Taste los, geben Sie "powershell" ein und drücken Sie OK oder drücken Sie die Eingabetaste ).
  2. Kopieren Sie das Skript unten in seiner Gesamtheit und klicken Sie dann einfach mit der rechten Maustaste in das PowerShell-Fenster .
  3. Dies sollte das Skript starten, und es wird eine Weile dauern, auszuführen.
  4. Bitte melden Sie Probleme. Ich bin kein PowerShell-Experte - ich bin ein Bereitstellungsspezialist, kein Programmierer, aber das Skript sollte die Aufgabe erledigen.
  5. Leistungshinweis : Ich erhalte nur das gesamte Win32_Product WMI-Objekt
    • Cherry-Picking-Eigenschaften schienen es sogar marginal langsamer zu machen (VBScript-Test).
    • Ich schätze, wir müssen trotzdem alle Reihen bekommen, und Rosskommissioniersäulen sind nur extra anhebend?
    • Für Win32_Property filtern wir sowohl Zeilen als auch Spalten (der Upgrade-Code ist nur einer von vielen Zeilentypen). Seien Sie auf einen langsamen Vorgang vorbereitet, WMI ist sehr langsam.
%Vor%

Auf Remote-Computern ausgeführt werden

  • Es sollte relativ einfach sein, das obige Skript so zu erweitern, dass es auf entfernten Rechnern läuft, aber ich bin nicht dazu eingerichtet, es im Moment richtig zu testen.
  • Die unten stehenden Informationen sind ein bisschen unordentlich geworden, lassen Sie es mich wissen, wenn es nicht verständlich oder unklar ist.
  • In einer echten Windows-Domäne sollte es (theoretisch) nur darum gehen, die Remote-Maschinen den WMI-Calls selbst hinzuzufügen (und eine Liste von Maschinen zu durchlaufen - siehe unten) . Und ganz entscheidend: Sie sollten ein echtes Domänenadministratorkonto verwenden, um die Abfrage auszuführen . Es ist möglich, dass die Änderungen, die ich unten auflisten, um WMI in Arbeitsgruppenumgebungen arbeiten zu lassen, auch für einige Domänen erforderlich sein könnten, die ich nicht kenne (Firewall-Regel und UAC-Registry-Optimierung). Ich würde vermuten, dass ein echtes Domain-Admin-Konto die erforderlichen Berechtigungen und Zugriff haben sollte.
  • Remoteverbindungen in WMI sind (mindestens) von der Windows-Firewall , DCOM-Einstellungen , CIMOM-Einstellungen und Benutzerkonto betroffen Control (UAC) (plus alle zusätzlichen Nicht-Microsoft-Faktoren - zum Beispiel echte Firewalls, Software-Firewalls von Drittanbietern, Sicherheitssoftware verschiedener Art usw.). Hier sind einige Details:
  • In Nicht-Domänen-Netzwerken (kleine Büros, Privatanwender usw.) müssen Sie wahrscheinlich Benutzeranmeldeinformationen direkt zu den WMI-Anrufen hinzufügen, damit es funktioniert.Und Sie müssen wahrscheinlich "echte Admin-Rechte" auf den betreffenden Computern haben, damit die Abfragen remote in einem Heimnetzwerk (Arbeitsgruppe) ausgeführt werden. Ich habe gehört, dass das integrierte Administratorkonto keine UAC-Probleme hat, aber ich habe es noch nie versucht. Meiner Meinung nach: Benutze dieses Konto nicht.
    • Bei meinen Tests musste ich die Windows-Firewall-Regeln aktualisieren ( 1 ) und ( 2 ) die Remote-UAC-Zugriffstoken-Filterung deaktivieren und einen echten Filter verwenden , lokaler Administrator-Account auf dem Remote-System. Beachten Sie, dass Ich empfehle keine dieser Änderungen , sondern nur darüber, was für mich funktioniert hat.
    • Änderung 1 : Windows Firewall, Befehl run (cmd.exe, wird als Administrator ausgeführt): netsh advfirewall firewall set rule group="windows management instrumentation (wmi)" new enable=yes ( source - siehe diesen Link für die Befehlszeile, um diese neue Regel wieder zu deaktivieren, wenn Sie gerade testen. Im Wesentlichen nur setzen enable = no) . Siehe die verknüpfte Quelle für möglicherweise restriktivere Regeln, die ebenfalls funktionieren könnten.
    • Änderung 2 : Deaktivierung der Remote-UAC-Zugriffstokenfilterung: Sie müssen den folgenden Registrierungswert festlegen: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ LocalAccountTokenFilterPolicy = 1 ( Quelle - mittlere Seite, zweite Hälfte). Ich habe ein 32-Bit-DWORD.

Nachdem diese Änderungen auf dem Remote-System vorgenommen wurden, fügte ich jedem Aufruf auch Benutzeranmeldeinformationen hinzu, indem ich den Benutzer $Cred = Get-Credential anforderte. Es gibt auch erweiterte Optionen zum Definieren der Benutzeranmeldeinformationen, wie hier erklärt: Passwort in eingeben - Credential (und hier ). Um den Lauf zu testen, hier ein kleines Testskript. Kopieren Sie alle folgenden Zeilen, ändern Sie den Namen der Remote-Maschine und fügen Sie sie in PowerShell ein, indem Sie mit der rechten Maustaste klicken (Sie werden zur Eingabe der Anmeldedaten aufgefordert):

%Vor%

Für das große PowerShell-Skript oben könnten die grundlegenden Zusätze für die Remote-Ausführung auf mehreren Computern in einer Windows-Domäne etwa so aussehen (ich werde das obige Skript nicht aktualisieren, da dies nicht möglich ist) teste das richtig). Denken Sie daran, die Liste der Namen entfernter Computer am Anfang des Skripts zu aktualisieren und mit einem Domänenadministratorkonto zu starten:

%Vor%

Um dieselbe Maschinenschleife für ein Nicht-Domänen-Netzwerk anzupassen, können Sie den WMI-Aufrufen Anmeldeinformationen hinzufügen. So ähnlich (Sie werden aufgefordert, Anmeldeinformationen für jede Maschine einzugeben - was möglicherweise verwirrend ist). Denken Sie daran, die Liste der Remote-Computernamen oben im Skript zu aktualisieren und ein Konto mit lokalen Administratorrechten für das Zielfeld zu verwenden:

%Vor%

Die wirkliche Antwort endet hier . Ich glaube, dass das obige neuere Skript die meisten Anwendungsfälle abdecken sollte, aber ich werde den Inhalt auch hier unten lassen, da es nicht obsolet ist, wahrscheinlich weniger effizient als das obige Skript. Das Lesen wird sich wahrscheinlich wiederholen.

Die folgenden Skripts zum Abrufen einzelner Aktualisierungscodes anstelle der gesamten Liste könnten von Interesse sein, wenn Sie zur Laufzeit einen einzelnen Aktualisierungscode aus Ihrer eigenen Anwendung abrufen möchten. Ich überlasse diesen älteren Inhalt.

  

Haftungsausschluss : Das obige Skript verwendet WMI, und wenn Sie auf die Klasse Win32_Product zugreifen, löst dies ein    Integritätsprüfung von installierten Paketen . Dies ist ziemlich langsam und kann   sehr spezielle Fälle lösen eine MSI-Selbstreparatur aus. Das ist nicht gut, wenn du es bist   in ein wichtiges Treffen :-). Zum Glück sollten Sie dazu in der Lage sein   Abbrechen von ausgelösten Selbstreparaturen (aber Ihre Abfrage wird wahrscheinlich nicht   vervollständigen, bis Sie die Reparatur beenden lassen). Quick Context Link (zur Aufbewahrung)

     

IMHO: Lassen Sie sich dadurch nicht davon abhalten, WMI zu benutzen - es ist nur ein   Ärger. Hinweis: Sowohl die nachfolgend beschriebenen PowerShell- als auch VBScript-Ansätze verwenden WMI und können dieses Problem ebenfalls auslösen.

Abrufen von Upgrade-Codes für MSI-Dateien, die nicht installiert sind

Wenn Sie den Upgrade-Code für ein MSI-Paket benötigen, das auf Ihrem Computer nicht installiert ist, lesen Sie bitte den Abschnitt " Manuelles Abrufen von Upgrade-Codes " unten mehrere Optionen (schauen Sie im Wesentlichen in die MSI-Datei selbst oder in ihre Quelldatei, um sie zu kompilieren).

Es ist nicht sicher, den Upgrade-Code für installierte Pakete von der ursprünglichen MSI-Installationsdatei selbst oder von den zum Kompilieren des MSI verwendeten (WiX) Quellen zu erhalten, da Upgrade-Codes sein können zum Zeitpunkt der Installation mit transformiert überschreiben (Details im Text unten - Transformationen sind kleine Datenbankfragmente angewendet Zur Installationszeit finden Sie unter diesem Symantec-Link weitere Informationen.

Der programmatische Abruf von Upgrade-Codes basiert auf WMI und Sie können entweder < strong> PowerShell oder VBScript , um WMI aufzurufen. Beide Methoden werden im Folgenden vorgestellt. Im Wesentlichen wird die folgende WMI-Abfrage ausgeführt, um den Aktualisierungscode für einen angegebenen Produktcode abzurufen:

%Vor%

Dieselbe Abfrage, die für VBScript und PowerShell verwendet wird. Sie können es auch als direkte WMI-Abfrage mit einem Tool wie WMIExplorer.exe ausführen. Ein sehr nützliches Werkzeug - sehr empfehlenswert. Ich glaube, das ist ihre Seite: Ссылка

Einzel-Upgrade-Code über PowerShell / WMI abrufen

Anstatt eine vollständige Tabelle mit allen Produktcodes und Upgrade-Codes auszugeben, können Sie einen einzelnen Upgrade-Code für einen bestimmten Produktcode abrufen. Das ist gut, wenn Sie versuchen, den Abruf innerhalb Ihres eigenen Anwendungscodes durchzuführen (dann ist es nur eine Standard-WMI-Abfrage und hat nichts mit PowerShell zu tun).

Im Folgenden finden Sie den einzelnen Upgrade-Code-Abruf über PowerShell (zum Starten von PowerShell: halten Sie die Windows-Taste gedrückt, tippen Sie auf R, lassen Sie die Windows-Taste los, geben Sie "powershell" ein und drücken Sie OK oder drücken Sie die Eingabetaste ):

%Vor%

Die Ausgabe sollte in etwa so sein (vielleicht etwas schwer zu lesen, ich hätte größere Schriftarten verwenden sollen):

Der in der obigen Abfrage angegebene Produktcode gilt für " Windows SDK Intellidocs ". Sie müssen es natürlich durch Ihren eigenen Produktcode GUID ersetzen. Um den Produktcode zu finden, den Sie übergeben müssen, können Sie auch eine PowerShell-Abfrage wie hier beschrieben verwenden: Wie kann ich die Produkt-GUID eines installierten MSI-Setups finden?

Der zurückgegebene Upgrade-Code stammt direkt aus der echten Windows Installer-Registrierungsdatenbank. Es erfordert keine weitere Verarbeitung oder Interpretation oder manuelle Konvertierungsschritte. Es wird auch korrekt sein, auch wenn eine Transformation den ursprünglichen Upgrade-Code änderte, als das MSI installiert wurde (Details zu den Umwandlungsproblemen unten).

Update, spezieller Hinweis : Ohne unnötige Komplikationen zu verursachen, glaube ich, dass ich einen WMI gefunden habe, der sehr spezifisch ist. Wenn ein ursprüngliches MSI keinen Aktualisierungscode festgelegt hat und Sie einen über eine Transformation hinzufügen, scheint WMI den Aktualisierungscode überhaupt nicht zu melden. Allerdings: Wenn das ursprüngliche MSI über einen Upgrade-Code verfügt und Sie es in einer Transformation überschreiben, meldet WMI den Upgrade-Code der Transformation (was erwartet wird). Ich habe das definitiv gesehen, muss es aber mit einem weiteren Testpaket verifizieren. Die Moral der Geschichte : Legen Sie in Ihrem MSI immer einen Upgrade-Code fest! Dann meidest du das ganze Problem dauerhaft. Und generieren Sie es nicht automatisch - schreiben Sie es hart (lesen Sie "Manual Retrieval of Upgrade Codes" unten für eine Erklärung).

Abrufen einzelner Upgrade-Codes mit VBScript / WMI (Legacy Approach)

Mit der unten gefundenen VBScript-Lösung ist nichts falsch - es hat sogar einige Vorteile gegenüber PowerShell - obwohl VBScript mittlerweile eine Legacy-Technologie ist. Die Vorteile sind, dass es auf allen Computern funktionieren sollte, auch wenn das .NET-Framework fehlt (oder gesperrt ist) und auf Computern, auf denen PowerShell fehlt (oder gesperrt ist). Es ist eine veraltete, aber praktikable Lösung, die ziemlich flexibel ist (es sei denn, VBScript ist ebenfalls gesperrt, aber alle modernen OS-Versionen unterstützen VBScript vollständig).

Um den Upgrade-Code so einfach wie möglich zu machen, habe ich ein " blankes VBScript " erstellt, das den Zweck erfüllen sollte. Es wurde nicht für das Targeting von Remotecomputern getestet, auch wenn WMI dies vom Design her tun sollte. Das Skript soll auf dem System laufen, auf dem Ihr mysteriöses MSI mit dem unbekannten Upgrade-Code installiert ist.

Dieses VBScript benötigt einen Eingabe-Produktcode (Eingabedialog wird angezeigt, wenn das Skript ausgeführt wird), und es wird dann fortfahren, den entsprechenden Upgrade-Code (falls vorhanden) zu suchen. Wie bereits erwähnt, können Sie den Produktcode für Ihr MSI verwenden: Wie kann ich die Produkt-GUID eines installierten MSI-Setups finden? . Sobald Sie den Produktcode (GUID) haben, können Sie dieses VBScript auf dem Zielcomputer ausführen, und Sie sollten den Aktualisierungscode innerhalb weniger Sekunden erhalten. WMI-Abruf kann sehr langsam sein.

%Vor%

Abrufen aller Upgrade-Codes und Produktcodes auf einer Maschine

  

Ich sollte erwähnen, dass ich ein großes VBScript habe, das ein   umfassender HTML - Bericht für alle installierten MSI - Pakete auf dem   Maschine läuft auf . Dazu gehören all Upgrade-Code und eine Liste von verwandten   Produktcodes (Produktcodes mit demselben Upgrade-Code). Ich bin jedoch mit dem Code nicht sehr zufrieden (ich bin ein Deployment-Spezialist, kein Coder). Das Skript   ist zu groß, zu langsam und zu ungeprüft für die Verwendung , also erstelle ich   das oben aufgefundene nackte Knochen-VBScript, um den Abruf für eine einzelne Person durchzuführen   nur Paket. Dieses Skript ist viel einfacher für Sie zu testen und zu ändern   eigene Benutzung.    Ich kann dieses große VBScript zum Testen zur Verfügung stellen, wenn es von Interesse ist. Es ist schreibgeschützt, abgesehen von einer einzelnen HTML-Datei, die an "Meine Dokumente" ausgegeben wird. Es sollte möglich sein, dieses Skript auch für die Verwendung auf entfernten Computern anzupassen.

Es gibt einen einzeiligen PowerShell-Befehl , um alle Produktcodes und zugehörigen Aktualisierungscodes abzurufen, aber dieser Ausgabefehl fehlt der Name der Produkte. Ich füge es hier der Vollständigkeit halber ein:

%Vor%

Die Ausgabe wird ähnlich sein (das "Value" -Feld ist der Upgrade-Code - Produktcodes ohne zugehörige Upgrade-Codes werden nicht angezeigt, soweit ich das beurteilen kann):

Manuelles Abrufen von Upgrade-Codes

Dieser Abschnitt listet einige "manuelle Wege" zum Abrufen von Upgrade-Codes auf, die keine Codierungs- oder Befehlszeilen benötigen. Diese manuellen Ansätze sind nicht die empfohlenen. Ich schließe sie nur ein, weil dies eine " Referenzantwort " sein soll. Mehrere verschiedene Optionen sollten bereitgestellt werden. Meine Empfehlung besteht darin, die oben angegebene PowerShell oder VBScript zu verwenden.

Das heißt, Upgrade-Codes sollten sich in der Regel niemals über die Versionen Ihres Produkts hinweg ändern. Sie können also versuchen, den in der MSI-Datei selbst oder in der zum Kompilieren verwendeten Quellcode wie unten beschrieben zu versuchen. Das Problem, das bereits mehrfach erwähnt wurde, ist, dass eine Transformation die Aktualisierungscodes bei der Installation ändern kann. Sie müssen den Aktualisierungscode daher programmatisch abrufen, wenn Sie sicher sein wollen, dass Sie den richtigen Code finden. Es sei denn, Sie versuchen, den Upgrade-Code von einem MSI zu erhalten, das nicht auf Ihrem System installiert ist. Dann brauchen Sie nur einen MSI-Dateibetrachter, wie unten in Punkt 1 beschrieben.

Eine transform ist nur ein Datenbankfragment mit Änderungen, die zum Installationszeitpunkt auf das ursprüngliche MSI angewendet werden . Es ist ein Tool, das hauptsächlich für die Unternehmensanwendungspaketierung verwendet wird, um Installationsprogramme zu ändern, ohne MSI-Dateien direkt zu ändern. Transformationen haben die Erweiterung .mst . Das Ändern des Upgrade-Codes über eine Transformation ist ungewöhnlich, aber nicht unüblich - insbesondere beim Umpacken von Unternehmen. In seltenen Fällen können Anwendungspaketer absichtlich die Upgrade-Guid ändern, damit sie ihre eigenen Upgrades für die installierten Pakete bereitstellen können (anstatt sich direkt auf die Aktualisierungen des Herstellers zu verlassen). Selten, aber ich habe es gesehen. Ob das eine gute Sache ist oder nicht, ist höchst umstritten.

Einfache, manuelle Wege , um MSI-Upgrade-Codes zu finden:

  1. Obwohl off offensiv offensichtlich, ist der einfachste Weg, den Upgrade-Code zu finden, zum Öffnen des ursprünglichen MSI zum Installieren des Produkts und zum Suchen des Upgrade-Codes in der Property-Tabelle . Sie benötigen lediglich ein Werkzeug, mit dem Sie MSI-Dateien öffnen können. Hier sind einige Tools: Welches Installationsprodukt benutzen? InstallShield, WiX, Wise, Advanced Installer usw. . Ihre schnellste Wette ist wahrscheinlich Orca, wenn Sie Visual Studio installiert haben (suchen Sie nach Orca-x86_en-us.msi und installieren Sie es - das ist Microsoft's offizieller MSI-Viewer und Editor), oder Super Orca, wenn Sie Visual Studio nicht installiert haben Link, um es zu finden).

  2. Wenn Sie ein Entwickler sind, der WiX (oder ein anderes Implementierungstool) verwendet, können Sie den problemlos in Ihrer WiX-Quelldatei suchen , die Sie zum kompilieren Ihrer MSI (oder Installshield-Quelle, Advanced Installer-Quelle oder das von Ihnen verwendete Bereitstellungstool).

    • Lassen Sie uns hier nicht mit zu gut gemeinten Ratschlägen, die das Hauptproblem verschleiern, los, aber Sie sollten den Code in Ihrer Quelle natürlich fest codieren und niemals automatisch generieren es !
    • Upgrade-Codes definieren " Familien verwandter Produkte " und sollten in Versionen (Versionen) stabil bleiben. In den meisten Fällen sollte es auch in den Sprachversionen stabil bleiben. Das genaue Setup hängt von den Bereitstellungsanforderungen ab.
    • Wenn Produkte nebeneinander existieren sollen, haben Sie normalerweise unterschiedliche Upgrade-Codes für die Produkte, die koexistieren müssen.
    • Faustregel : Halten Sie Upgrade-Codes so lange wie möglich stabil, wann immer dies möglich ist. Ändern Sie sie, wenn die Anforderungen es absolut erfordern.
    • Zum Schluss: Verwenden Sie niemals denselben Upgrade-Code für verschiedene Produkte, die ihren eigenen " Lebenszyklus " haben und keine echte Beziehung zueinander haben. Sie sind nicht verwandt. Dies ist genauso wichtig wie die Stabilität Ihres Upgrade-Codes für verwandte Produkte. Denken Sie an " Lebenszyklus " und " Familienbeziehung " und " Koexistenz " Anforderungen.
    • Das war eine große Abschweifung, zurück zu dem Problem: Verbesserungscodes finden.
  3. Auch wenn Sie nicht über die ursprüngliche MSI verfügen, ist es sogar möglich, die zwischengespeicherte MSI aus der ursprünglichen Installation im Ordner %SystemRoot%\Installer zu finden. Die MSI-Dateien haben hier einen mysteriösen Hex-Namen, aber sie sind nur Kopien der ursprünglichen MSI-Dateien, die zur Installation der verschiedenen Produkte verwendet werden - zwischengespeichert an einem sicheren Ort, um für Änderungen, Reparaturen und Deinstallationen verfügbar zu sein. Was immer du tust, mach dich nicht in diesem Ordner auf. Löschen Sie nie etwas . Sie finden das MSI, das Ihr Produkt installiert hat, indem Sie die erste MSI-Datei auswählen und in der Windows Explorer-Statusleiste nachsehen, wie der Produktname für eine ältere Windows-Version lautet. In Windows 10 scheint es, dass Sie mit dem Mauszeiger über ein MSI fahren können und ein Popup mit einigen MSI-Details angezeigt wird. Sie klicken dann einfach durch die Liste, bis Sie das richtige Produkt gefunden haben. Öffnen Sie das MSI und suchen Sie den Upgrade-Code in der Eigenschaftentabelle .

  4. Einige Benutzer verwenden die Registrierung, um die Aktualisierungscodes zu lesen: Wie kann ich den Aktualisierungscode für eine installierte Anwendung in C # finden? . Meiner Meinung nach ist dies kein guter Ansatz, es gibt bessere Wege - wie zum Beispiel die Verwendung von PowerShell wie oben beschrieben. Es besteht keine Notwendigkeit für all diese Konvertierung und Interpretation von gepackten GUIDs (das ist das GUID-Format, das in der Windows Installer-Registrierungsdatenbank).

Das sollte die primären "manuellen Methoden" vervollständigen, um einen Upgrade-Code schnell zu erhalten. Nur einige Methoden für das Arsenal, die manchmal gut genug sind. Es gibt wahrscheinlich mehrere Wege, die ich vergessen habe.

Bevorzugen Sie die programmatischen Ansätze , aber wenn Sie in Eile sind und ohne all Ihre Tools arbeiten, sind einige manuelle Optionen gut. Einige dieser manuellen Methoden erfordern jedoch mehr Werkzeuge als die PowerShell-Befehlszeile (Sie benötigen einen MSI-Dateibetrachter, der nicht immer auf der Box verfügbar ist, wenn Sie sich auf einer "Support-Mission" auf dem Computer eines Benutzers befinden). Die Zeit ist gekommen, um PowerShell zu verwenden (ja, ich fühle mich auch veraltet).

Übrigens sind MSI-Dateien im Wesentlichen abgespeckte SQL Server-Datenbanken, die als COM-strukturierte Speicherdateien (MS Office-Dateiformat) gespeichert sind. Im Wesentlichen ein Dateisystem innerhalb einer Datei mit verschiedenen Speicher-Streams.

Wenn Sie auf einem Computer ohne MSI-Viewer feststecken, können Sie zwischengespeicherte MSI-Datenbanken direkt von PowerShell abfragen:

Stein Åsmul 08.10.2017, 23:35
quelle