Registry über WMI auslesen auf einem Remote Host > Installierte Software ermitteln?

09/04/2010 - 09:45 von Volkan Senguel | Report spam
Hallo zusammen, ich benötige eine Funktion um die Registry einer Remote
auszulesen (Installierte Software)
Lokal geht dies so ohne weiteres:

private void getApps()
{
SoftwareItems = new List<SoftwareItem>();

string softwarekey =
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";

RegistryKey key = Registry.LocalMachine.OpenSubKey(softwarekey);
foreach (string sub in key.GetSubKeyNames())
{
SoftwareItem newitem = new SoftwareItem();
newitem.Description = "N/A";
newitem.Version = "N/A";
newitem.Installdate = SqlDateTime.MinValue.Value;

RegistryKey subkey =
Registry.LocalMachine.OpenSubKey(softwarekey + "\\" + sub);
if (subkey.GetValue("DisplayName") != null)
{
newitem.Description =
subkey.GetValue("DisplayName").ToString().Trim();
}

if (subkey.GetValue("DisplayVersion") != null)
{
newitem.Version =
subkey.GetValue("DisplayVersion").ToString().Trim();
}

if (subkey.GetValue("InstallDate") != null)
{
try
{
string date =
subkey.GetValue("InstallDate").ToString().Trim();
int year = Convert.ToInt32(date.Substring(0, 4));
int month = Convert.ToInt32(date.Substring(4, 2));
int day = Convert.ToInt32(date.Substring(6, 2));
newitem.Installdate = new DateTime(year, month,
day);
}
catch
{
newitem.Installdate = SqlDateTime.MinValue.Value;
}
}
}
}

Ich würde aber gerne dies auch Remote machen können und habe aber keine
Remote Funktionen gefunden :(
...Google hat mir leider auch nicht weiterhelfen können ohne riesige
Code-Konstrukt etc. was aber auch nicht wirklich funktioniert hat... :(

Ich hab einige Quellen gefunden welches dies über WMI versuchen aber nicht
wirklich gehen.

Wie kann ich die Installierte Software aus einem Remote PC ermitteln?

Danke für jeden Tipp
Volkan
 

Lesen sie die antworten

#1 FrankDzaebel
09/04/2010 - 14:26 | Warnen spam
Hallo Volkan,

ich benötige eine Funktion um die Registry einer
Remote auszulesen [...] habe aber keine Remote
Funktionen gefunden :( ...Google hat mir leider auch
nicht weiterhelfen können ...



Nutze ggf. folgendes:

[RegistryKey.OpenRemoteBaseKey-Methode (Microsoft.Win32)]
http://msdn.microsoft.com/de-de/lib...a3xws.aspx



Ich hab einige Quellen gefunden welches dies
über WMI versuchen aber nicht wirklich gehen.



ja, aber die WMI-Beispiele sind oft nicht ausreichend.
Entscheidend für die Remote-Verbindung (z.B.)
über AD-Impersonifizierung wàre zum Beispiel
die ConnectionOptions-Member richtig zu setzen,
nebst einen administrativen Account zu benutzen,
der eben die Rechte dazu hàtte. Insgesamt empfehle
ich unter normalen Umstànden aber für diesen "einen"
Zweck die oben angegebene OpenRemoteBaseKey-
Methode - wenn möglich.

[ConnectionOptions-Klasse (System.Management)]
http://msdn.microsoft.com/de-de/lib...tions.aspx

co.Authentication = AuthenticationLevel.PacketPrivacy; //!!!
co.Username = Einstellungen.Instanz.Adminname;
co.Password = Einstellungen.Instanz.AdminPasswort;
co.Impersonation = ImpersonationLevel.Impersonate;
co.Timeout = new TimeSpan(0, 0, 10);

für die weitere Anprogrammierbarkeit bzgl. WMI
siehe auch:

[Verfahrensweise: Herstellen einer Verbindung mit einem
Remotecomputer]
http://msdn.microsoft.com/de-de/lib...57337.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen