C#: Wie man die Installation von Programmen genau wie in der Systemsteuerung-Programme und Funktionen?
Ich lese eine Menge Informationen bekommen-Programme. Keiner der algorithmen hat zu tun, was ich will. Ich brauche, um die installierten Programme genau wie in control panel.
Also habe ich benutzt:
- WMI
Win32_Product
Klasse. Es zeigt nur die msi-installierten Programme. - Registry-Schlüssel.
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
. Wieder, einige Programme werden nicht angezeigt in der Systemsteuerung einige Programme in der Systemsteuerung angezeigt, nicht in diesem registry-Knoten.
So, gibt es jemanden in dieser Welt, die wussten, mit welchem Algorithmus die Systemsteuerung verwenden, um die Anzeige installierte Programme?
UPD1:ja, ich nutze 64 bit, ich weiß, es ist ein weiterer Knoten für 64bit installiert Programme "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" aber der folgende code listet twise HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall Abschnitt, seltsam...
var Programme = new Liste();
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
mit (Microsoft.Win32.RegistryKey key = Registrierung. "LocalMachine" .OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
mit (RegistryKey Unterschlüssel = key.OpenSubKey(subkey_name))
{
var name = (string)Unterschlüssel.GetValue("DisplayName");
if(!string.IsNullOrEmpty(name))
{
Programme.Hinzufügen(name);
}
}
}
}
registry_key = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
var name = (string)subkey.GetValue("DisplayName");
if (!string.IsNullOrEmpty(name))
{
programs.Add(name);
}
}
}
}
foreach (var program in programs.OrderBy(x => x))
{
Console.WriteLine(program);
}
InformationsquelleAutor der Frage MelnikovI | 2013-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok gyus, schrieb ich Klasse, die installierten Programme aus der registry, ohne hotfixes und updates. Es ist noch nicht genau wie in control panel, aber fast. Ich hoffe, dies hilft jemand anderes.
InformationsquelleAutor der Antwort MelnikovI
Ich habe den code, MelnikovI schrieb (das war extrem hilfreich) und fügte ein paar Dinge. Erstens, es suchen vier Plätze in der registry:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Es wird auch überprüft, um zu sehen, ob es gibt alle Unterschlüssel - wenn nicht überspringt.
Schließlich macht es einen regex zu erlauben nur eine bestimmte Menge von Zeichen [^a-zA-Z0-9 .()+-].
Ich bin nur ab C#, so dass ich nicht weiß einen Weg, um eine Schleife durch alle vier reg-Standorte, also ich habe zwei Schleifen (eine für HKLM und eine für HKCU).
Wenn jemand interessiert ist, ich im Vergleich der Ergebnisse der PowerShell habe ich mit und Sie sind die gleichen.
InformationsquelleAutor der Antwort John
MelnikovI die Antwort ist für die meisten Zwecke ausreichend-ich hatte die 144 items in meiner Liste vs 143 in Programme und Funktionen. Für die überprüfungseine Lösung ist, schlagen diese registry-Standorte:
Sich zu qualifizieren, jeder Teilschlüssel MUSS:
Und MUSS NICHT haben:
Den eine weitere Verbesserung die ich gefunden habe ist für Windows Installer-Einträge, definiert als:
Für solche Einträge, nehmen Sie den zusätzlichen Schritt der Verwendung der Win32-Funktion MsiGetProductInfoW von msi.dllund Fragen nach dem "VersionString" - Eigenschaft für die GUID repräsentiert durch den Schlüssel.
Wenn diese Funktion gibt 1605: ERROR_UNKNOWN_PRODUCTes bedeutet, dass der Eintrag nicht installiert laut Windows Installer, und sollte von der Anzeige ausgeschlossen.
Nach der Umsetzung dieses kleine zwicken, meine Liste ist nun identisch auf Programme und Funktionen.
InformationsquelleAutor der Antwort Mike