2011-01-07 4 views
1

Ich möchte die Versionsnummern der in meinem Computer installierten Software erhalten ... ist es möglich, die Registry-Klasse in C# zu verwenden?Wie kann ich die installierte App-Version aus der Registrierung abrufen?

 RegistryKey regKey; 

    public void ReadReg() 
    { 
     regKey = Registry.LocalMachine; 
     RegistryKey sk= regKey.OpenSubKey("SOFTWARE\\"); 
     string[] subKeys = sk.GetSubKeyNames(); 

     foreach (string sub in subKeys) 
     { 
      Console.WriteLine(sub); 
     }    
    } 
+1

Welche Software ist für Sie interessant? – Oleg

+0

@Oleg muss hier drüben sein ;-) –

+1

@Uwe Keim: Danke Uwe! Es ist repariert. – Oleg

Antwort

3

Es gibt keinen standardmäßigen und allgemein zugänglichen Ort, an dem Installateure Produktinformationen speichern. Die Installationsdatenbank enthält jedoch diese Informationen (wobei Produkte MSI — direkt oder indirekt verwenden) und diese Informationen sind über WMI verfügbar.

WMI kann auch von .NET mit System.Management Typen verwendet werden. Die Abfrage:

select name,version from Win32_Product 

Anpassung der Probe here auf diese Frage sollte nicht zu hart sein.

+0

+1, ordentlich und wusste das nicht. –

1

Und welchen Schlüssel werden Sie betrachten, und wie bestimmen Sie, dass es eine Versionsnummer ist? Es gibt keine Garantien, da es sich von Verkäufer zu Verkäufer ändert.

Eine Alternative wäre, ausführbare Dateien auf Ihrem Computer aufzuzählen (sagen in C:\Program Files\ und es ist Unterordner), und verwenden Sie FileVersionInfo die Versionsinformationen aus der ausführbaren Datei zu extrahieren, selbst:

FileVersionInfo fi = FileVersionInfo.GetVersionInfo("yourexe.exe"); 
+0

aber Benutzer kann Software irgendwo richtig installieren? –

+0

@Sisya yup, aber Sie * müssen * Ihre Suche nicht auf 'Programme' beschränken. Siehe diesen Link: http://www.thereforesystems.com/get-a-list-of-installed-applications-using-linq-and-c/ –

0

Sie Version wie erhalten -

Wenn der Versionsschlüssel verfügbar ist, wird der Wert zurückgegeben, andernfalls wird null zurückgegeben.

+0

-1: Richtig, aber nutzlos. Das ist * wie Sie einen Wert aus einem Registrierungsschlüssel lesen, aber die Frage ist wirklich: Wo sind die Schlüssel/Werte, die Versionsinformationen enthalten (schnelle Antwort: Einige Anwendungen haben dies möglicherweise in der Registrierung, aber im Allgemeinen ist dies nicht in der Registrierung). – Richard

+0

@Richard: das ist wahr ... gibt es irgendeine Methode, die helfen könnte? –

+0

@Sisya: Siehe meine Antwort. – Richard

1

Es gibt keine Garantie, dass Sie Versionsinformationen zu einem Programm in der Registrierung finden. Ich verwende den Registrierungsschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\programname , um den vollständigen Pfad zu finden, aber es hängt immer noch vom Setup/Installationsprogramm ab, um diesen Wert festzulegen. Wenn es schön genug war, diese Konvention zu verwenden, können Sie den vollständigen Pfad verwenden, um GetFileVersionInfo(...) aufzurufen.

Es ist immer noch Aufgabe des Entwicklers, die nützliche Ressource Informationen wie Version, Firmenname, Beschreibung, Urheberrecht, etc ... Sie können sagen, einige Programme haben die alten Standard "To Do" Platzhalter in der Ressource. Andere, sogar Microsoft, werden vergessen, den Firmennamen in die Ressource für Programme wie Dumprep aufzunehmen. Andere Exes, die ohne Visual Studio erstellt wurden, müssen kein Ressourcensegment enthalten, auf das von GetFileVersionInfo() zugegriffen werden kann.

Letztendlich habe ich diese Funktion als die zuverlässigste gefunden. Beachten Sie auch, bevor Sie anrufen GetFileVersionInfo() stellen Sie sicher, dass Sie GetFileVersionSize() anrufen. Wenn es sich um eine x64-Version von Windows handelt, müssen Sie möglicherweise in einigen Fällen Wow64DisableWow64FsRedirection(...)Wow64RevertWow64FsRedirection(...) aufrufen oder SysNative verwenden, wenn sich das Programm in einem Systemordner befindet, der umgeleitet wird.

Verwandte Themen