Wie bekomme ich das Installationsverzeichnis?

8

Das MSI speichert das Installationsverzeichnis für die zukünftigen Deinstallationsaufgaben.

Die Verwendung der Eigenschaft INSTALLPROPERTY_INSTALLLOCATION (also "InstallLocation" ) funktioniert nur, wenn das Installationsprogramm die Eigenschaft ARPINSTALLLOCATION während der Installation festgelegt hat. Aber diese Eigenschaft ist optional und fast niemand benutzt sie.

Wie kann ich das Installationsverzeichnis abrufen?

    
Michael Damatov 01.11.2008, 18:32
quelle

6 Antworten

2

Verwenden Sie einen Registrierungsschlüssel, um Ihr Installationsverzeichnis zu verfolgen. Auf diese Weise können Sie beim Aktualisieren und Entfernen des Produkts darauf verweisen.

Mit WIX Ich würde eine Komponente erstellen, die den Schlüssel direkt hinter dem Directy-Tag des Installationsverzeichnisses, Deklaration

, erstellt     
CheGueVerra 01.11.2008, 18:42
quelle
0

Ich würde versuchen, Installer.OpenProduct (Produktcode) zu verwenden. Dies öffnet eine Sitzung, in der Sie dann nach Property ("TARGETDIR") fragen können.

    
Martin v. Löwis 01.11.2008 18:52
quelle
0

Versuchen Sie Folgendes: var sPath = this.Context.Parameters ["assemblypath"]. ToString ();

    
Cory Cookson 01.04.2009 12:44
quelle
0

Ich würde MsiGetComponentPath () verwenden - Sie benötigen die ProductId und eine ComponentId, aber Sie erhalten den vollständigen Pfad zur installierten Datei - wählen Sie einfach eine, die zum Speicherort Ihres Installationsverzeichnisses führt. Wenn Sie den Wert eines Verzeichnisses für eine zufällige MSI erhalten möchten, glaube ich nicht, dass es eine API gibt, mit der Sie das tun können.

    
Steven Bone 20.08.2009 14:30
quelle
0

Wie an anderer Stelle im Thread erwähnt, schreibe ich normalerweise einen Registrierungsschlüssel in HKLM, um das Installationsverzeichnis für nachfolgende Installationen leicht abrufen zu können.

Wenn es sich um ein Setup handelt, das dies nicht getan hat, verwende ich die integrierte Windows Installer-Funktion AppSearch: Ссылка , um das Verzeichnis der vorherigen Installation zu finden, indem Sie eine Dateisignatur angeben, nach der gesucht werden soll.

Eine Dateisignatur kann aus dem Dateinamen, der Dateigröße und der Dateiversion und anderen Dateieigenschaften bestehen. Jede Signatur kann mit einem bestimmten Maß an Flexibilität angegeben werden, sodass Sie beispielsweise verschiedene Versionen derselben Datei finden können, indem Sie einen Versionsbereich angeben, nach dem gesucht werden soll. Überprüfen Sie die SDK-Dokumentation: Ссылка

In den meisten Fällen verwende ich die Hauptanwendung EXE und setze eine enge Signatur, indem ich nach einem engen Versionsbereich der Datei mit der korrekten Version und dem richtigen Datum suche.

    
Stein Åsmul 18.05.2011 22:08
quelle
0

Vor kurzem musste ich Natural Docs durch Ketarin automatisieren >. Ich könnte annehmen, dass es in Standardpfad installiert wurde ( %ProgramFiles(x86)%\Natural Docs ), aber ich entschied mich für einen sicheren Ansatz. Leider, selbst wenn das Installationsprogramm einen Schlüssel auf HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall erstellt hat, führt mich nichts davon dazu, das Installationsverzeichnis zu finden.

Die Antwort von Stein schlägt die AppSearch-MSI-Funktion vor und es sieht interessant aus, aber leider bietet das MSI-Installationsprogramm von Natural Docs keine Signaturtabelle für seine Vorgehensweise.

Also habe ich mich entschieden, in der Registry nach einem Verweis auf NaturalDocs-Installationsverzeichnis zu suchen, und ich finde eins in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components key.

Ich habe eine Reg-Klasse in C # für Ketarin entwickelt, die Rekursion ermöglicht. Also schaue ich alle Werte durch HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components und wenn die Main-Anwendung ausführbare Datei (NaturalDocs.exe) in einem der Unterschlüssel Werte gefunden wird, wird es extrahiert ( C:\Program Files (x86)\Natural Docs\NaturalDocs.exe wird C:\Program Files (x86)\Natural Docs ) und es ist die Systemumgebungsvariable% PATH% hinzugefügt (So ​​kann ich "NaturalDocs.exe" direkt aufrufen, anstatt den vollständigen Pfad zu verwenden).

Die Registry "Klasse" (Funktionen, eigentlich) kann auf GitHub ( RegClassCS ) gefunden werden.

%Vor%

Auch wenn Sie Ketarin nicht verwenden, können Sie die Funktion einfach einfügen und über Visual Studio oder CSC erstellen .

Mit RegClassVBS kann ein allgemeinerer Ansatz gewählt werden, der die Rekursion von Registrierungsschlüsseln zulässt und nicht von der .NET Framework-Plattform abhängt Build-Prozesse.

Bitte beachten Sie, dass das Auflisten des Komponentenschlüssels CPU-intensiv sein kann. Das obige Beispiel hat einen Length-Parameter, den Sie verwenden können, um dem Benutzer einen Fortschritt anzuzeigen (vielleicht etwas wie "i from (subKeysName.Length - 1) keys remaining" - sei kreativ). Ein ähnlicher Ansatz kann in RegClassVBS verwendet werden.

Beide Klassen (RegClassCS und RegClassVBS) haben Dokumentation und Beispiele, die Sie führen können, und Sie können sie in jeder Software verwenden und zur Entwicklung von ihnen beitragen, indem Sie einen Commit auf dem Git Repo machen und (natürlich) ein Problem lösen Wenn Sie ein Problem finden, das Sie selbst nicht lösen können, können Sie versuchen, das Problem zu reproduzieren, um herauszufinden, was wir dagegen tun können. =)

    
jaysponsored 29.12.2017 03:12
quelle