Hi ich hab versucht über wmi die registry von einen anderen rechner auszuhlesen,
das programm wird auf nen Enterprise server 2003 betriben mit eigener domain,
der rechner auf den ich zugreifen möchte ist in der domain angemeldet
ich bekomme aber immer die Fehlermeldung:
RPC SERVER nicht erreichbar (Ausnahme von HRESULT: 0x800706BA)
Auf beiden Maschinen ist aber der RPC dienst gestartet.
Hier ist mal der code vieleicht kann mir einer sagen woran das liegt und
was die fehlermeldung zu bedeuten hat
const uint HKEY_LOCAL_MACHINE = 0x80000002;
const string userName = "admin";
const string password = "passwort";
const string computerName = "PC1";// rechner auf den ich zugreifen will
const string managementPath = @"\\" + computerName + @"\root\default";
ConnectionOptions options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.Default;
options.Impersonation = ImpersonationLevel.Default;
options.EnablePrivileges = true;
options.Locale = "MS_407"; // für Deutschland
options.Username = userName;
options.Password = password;
ManagementScope ms = new ManagementScope(managementPath, options);
ms.Connect();
ManagementClass wmiRegistry = new ManagementClass(ms, new ManagementPath("StdRegProv"), new ObjectGetOptions(ms.Options.Context));
GetStringValue() erzeugen
ManagementBaseObject p = wmiRegistry.GetMethodParameters("GetStringValue");
p["hDefKey"] = HKEY_LOCAL_MACHINE;
p["sSubKeyName"] = @"SOFTWARE\test";
p["sValueName"] = "porjekt";
ManagementBaseObject ProfilesDirectory = wmiRegistry.InvokeMethod("GetStringValue", p, null);
p["sValueName"] = "AllUsersProfile";
ManagementBaseObject AllUsersProfile = wmiRegistry.InvokeMethod("GetStringValue", p, null);
p["sSubKeyName"] = @"SYSTEM\test";
p["sValueName"] = "Standart";
ManagementBaseObject ComputerName = wmiRegistry.InvokeMethod("GetStringValue", p, null);
Console.WriteLine("\"{0}\\{1}\" auf {2}", ProfilesDirectory["sValue"], AllUsersProfile["sValue"], ComputerName["sValue"]);
schon mal im voraus dank
So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(
Warum verwendest du denn nicht einfach
RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, Zielhost);
key.OpenSubKey(Pfad).GetValue(Schlüssel);
Musst vorher noch mit
using Microsoft.Win32;
den Namespace einbinden.
Wesentlich einfacher und v.a. performanter!!!
Grüße
ich soll des mittels WMI verwirklichen, warum so weis ich net aber trotzdem danke
So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(
noch ne kurze frage telnet
wie kann ich wenn ich des so mach dan sagen mit welchen namen ich mir anmelden will beim anderen rechner?
So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(
Hab den Thread hier grad wiedergefunden:
Einen Benutzernamen / Kennwort übergeben geht nicht so einfach (leider) !
Du musst das Programm im Kontext eines Anwenders ausführen, der auf der Remote-Maschine die notwendigen Rechte hat.
Bei mir hier hab ich das so gelöst:
An der Domäne gibts nen Serviceaccount, der auf allen zu prüfenden Rechnern Admin-Rechte hat.
Das Programm, mit dem ich die Keys abfrage, starte ich aus meinem Kontext und über Impersonation wechsle ich den Benutzerkontext auf den Serviceaccount.
Wenn ich mit auslesen fertig bin mache ich die Impersonation einfach wieder rückgängig.
Grüße