2010-08-13 9 views
8

Ich habe einige MSI mit GUID installiert (0733556C-37E8-4123-A801-D3E6C5151617). Das Programm in der Registrierung registriert: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Uninstall \()Wie finde ich den Speicherort des Programms in der Registrierung, wenn ich MSI GUID weiß?

Wert UninstallString = MsiExec.exe/I (0733556C-37E8-4123-A801-D3E6C5151617)

Meine Frage ist: wie Dienstprogramm MsiExec.exe den Namen und den Pfad zu der Datei, die beim Entfernen von Programmen ausgeführt werden soll, kennt? Wo in der Registry kann diese Information gefunden werden?

+0

Sehr gute Antworten bereits, aber ** der einfachste Weg ** Informationen über Ihr installiertes Produkt zu erhalten ist wahrscheinlich [** mit einem einfachen PowerShell-Befehl **] (https://stackoverflow.com/questions/29937568/how -can-ich-finde-das-Produkt-Guid-of-ein-installiertes-msi-setup/29937569 # 29937569) –

+0

Ich lese dies noch einmal, ich glaube, ich habe Ihre Frage falsch gelesen.Ich nehme an, die tatsächliche Antwort auf Ihre Frage ist, dass alle Informationen über installierte Produkte in der Registrierung unter '' HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer'' gespeichert sind. Dies ist ** die Windows Installer-Datenbank ** und Sie dürfen hier niemals direkt Werte berühren. Stattdessen können Sie auf sie über [Win32 API-Aufrufe (C++)] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa369426 (v = vs.85) .aspx) oder Sie können zugreifen [COM Automatisierung] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa367810 (v = vs.85) .aspx) (einfacher). –

Antwort

12

Windows hält die Windows Installer-Konfigurationsinformationen in der Registrierung verborgen und verschlüsselt. Es ist nicht mit dem menschlichen Auge durchsuchbar wie andere Teile der Registry.

Zum Abfragen/Ändern/Löschen dieser Informationen müssen Sie MSI-Funktionen verwenden.
(Installer Function Reference)

Für Ihre spezielle Frage, versuchen Sie die Funktion MsiGetProductInfo.

+2

Versteckt und verschlüsselt - wirklich? – Rup

+1

Weitere Informationen finden Sie unter [Windows Installer, Teil 2] (http://blogs.msdn.com/b/windows_installer_team/archive/2006/05/12/595950.aspx) im [Windows Installer-Teamblog] (http: //blogs.msdn.com/b/windows_installer_team/). Siehe Regel 21: Vermeiden Sie die Verwendung von Konfigurationsdaten, die Sie nicht besitzen. Dort heißt es: "Diese Daten werden vom Installer verwaltet, und der direkte Zugriff durch Benutzer oder Anwendungen wird abgeraten. Tatsächlich sind einige der Daten verschlüsselt, so dass es sehr schwierig ist, sie manuell zu manipulieren." –

0

Dieser Schlüssel entspricht HKEY_CLASSES_ROOT\Installer\Products\.

+0

HKEY_CLASSES_ROOT \ Installer \ Products \ enthält keinen Pfad zum installierten Programm. Wo kann ich es finden? – Yuriy

+1

Es braucht nicht den Pfad zu der App, die installiert wurde, was ist, wenn es 10 Anwendungen installiert ?, es braucht nur den Pfad zum Uninstaller (oder .msi-Modul). Schauen Sie sich @ die Ausgabe von "wmic Produktliste" in der Befehlszeile an. –

+0

Eigentlich muss ich den Speicherort der Anwendung (Festplatte) bestimmen, um den verfügbaren Speicherplatz vor der Installation von MSP-Patch zu schätzen. Kann ich den Speicherort der installierten Anwendung ermitteln, wenn ich nur GUID in HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {} weiß? – Yuriy

7

Sie könnten versuchen, über die Befehlszeile:

wmic product where "Name like '%your software here%'" get Name, Version, PackageCode 
+3

Wow cool! aber mein cmq sagt, dass es eine ungültige Abfrage ist ... – BlackBear

1

ist es ein kostenloses Dienstprogramm von Tarma Software Research, die ich für diese hilfreich. Holen Sie es von their website.

7

Hier ist ein einfaches C# -Programm, das MsiGetProductInfo verwendet, wie William Leara sagt, um den tatsächlichen Speicherort des zwischengespeicherten Installationsprogramms auf der Festplatte zu erhalten.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Int32 len = 512; 
     System.Text.StringBuilder builder = new System.Text.StringBuilder(len); 
     MsiGetProductInfo("{89C098E5-C108-49F9-9B1D-10503C6D8A05}", "LocalPackage", builder, ref len); 
     Console.WriteLine(builder.ToString()); 
     Console.ReadLine(); 
    } 

    [DllImport("msi.dll", CharSet = CharSet.Unicode)] 
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 
} 
1

Sie benötigen keine Software. Dies funktioniert in Windows 10 und ich denke, es ist auch für Windows 7 gültig.

Wenn Ihr Produktcode 0733556C-37E8-4123-A801-D3E6C5151617 lautet. Versuchen Sie, den Schlüssel C65533708E7332148A103D6E5C516171 zu finden (im Grunde ist es umgekehrt), sobald Sie es gefunden, nach InstallProperties Unterschlüssel suchen, wenn nicht existiert, versuchen Sie, andere Ergebnisse zu finden. Sobald Sie InstallProperties gefunden haben, öffnen und suchen Sie den LocalPackage Key. Und dann haben Sie den Pfad für die MSI-Paket, die MSI als Cache speichert, wenn Sie Ihre Anwendung installiert haben.

1

Die Prämisse dieser Frage ist irreführend, da die Deinstallationszeichenfolge in der Registrierung bei der Deinstallation nicht verwendet wird. Gehen Sie voran und ändern Sie die Zeichenfolge, um dies zu testen - es wird nicht Ihre geänderte Zeichenfolge verwenden.

Obwohl Verweise auf Sachen in der Registrierung möglicherweise ansprechend sind, lautet die kurze Antwort, dass Windows Installer-Daten in der Registrierung Implementierungsdetails sind. Die Frage ist im Grunde zu fragen, wie MsiConfigureProduct (.... INSTALLSTATE_ABSENT ...) funktioniert, und es ist sinnlos zu erraten, die Details der Implementierung und wo es in der Registrierung sein könnte. Es sind APIs ganz unten. Es mag eine tatsächliche Aufgabe gegeben haben, die das Poster vielleicht erreichen wollte, aber es wird durch eine Frage maskiert, wie die Deinstallation funktioniert.

+0

Definitiv zustimmen - es ist nie akzeptabel, auf MSI Datenbankdetails direkt zuzugreifen, oder gerade zu versuchen, es zu entschlüsseln, was viele Leute mit Sachen zu tun scheinen, die sie in der Registrierung finden. –