2016-09-27 2 views
0

Hallo arbeiten wir an C# Framework v4.0 asp.net MVC-Anwendung auf einer verteilten Struktur. Wir verwenden Server1 für Image Server2 für MySQL-Datenbank und Server3 für Web. Meine Aufgabe ist es, von allen drei Servern freien Speicherplatz und Speicherplatz frei zu bekommen und auf der Web-Admin-Seite anzuzeigen. Ich weiß, wie ich Speicherplatz für localhost mit WMI anzeigen kann. Ich möchte Server1 und Server3 Festplatteninformationen anzeigen, die statische IP haben (Alle drei Server haben Remote Desktop und Freigabe aktiviert). aber ich bekommeAbrufen von Disk-Informationen von Remote-Server C#

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 

hier mein Code

ManagementScope scope = new ManagementScope("\\\\Server IP\\root\\cimv2"); 
scope.Connect(); 

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
SelectQuery query1 = new SelectQuery("Select * from Win32_LogicalDisk"); 

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 

ManagementObjectCollection queryCollection = searcher.Get(); 

ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(scope, query1); 
ManagementObjectCollection queryCollection1 = searcher1.Get(); 

foreach (ManagementObject m in queryCollection) 
{ 
    // Display the remote computer information 
    Console.WriteLine("Computer Name : {0}", 
         m["csname"]); 
    Console.WriteLine("Windows Directory : {0}", 
         m["WindowsDirectory"]); 
    Console.WriteLine("Operating System: {0}", 
         m["Caption"]); 
    Console.WriteLine("Version: {0}", m["Version"]); 
    Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]); 
    Console.WriteLine(); 

} 

foreach (ManagementObject mo in queryCollection1) 
{ 
    Console.WriteLine(" Disk Name : {0}", mo["Name"]); 
    Console.WriteLine(" Disk Size : {0}", mo["Size"]); 
    Console.WriteLine(" FreeSpace : {0}", mo["FreeSpace"]); 
    Console.WriteLine(" Disk DeviceID : {0}", mo["DeviceID"]); 
    Console.WriteLine(" Disk VolumeName : {0}", mo["VolumeName"]); 
    Console.WriteLine(" Disk SystemName : {0}", mo["SystemName"]); 
    Console.WriteLine("Disk VolumeSerialNumber : {0}", mo["VolumeSerialNumber"]); 
    Console.WriteLine(); 
} 
Console.ReadLine(); 

aber wenn die Kompilierung geht scope.Connect() an der Leitung; dann wirft es Ausnahmezugriffs

verweigert

ich this article using Dcomcnfg.exe security versucht haben, aber kann nicht von dieser Ausnahme erhalten noch

ich habe auch

ConnectionOptions options = new ConnectionOptions(); 
options.Username = @"Admin-PC\username"; 
options.Password = @"password"; 
options.Impersonation = ImpersonationLevel.Impersonate; 
options.Authentication = AuthenticationLevel.Connect; 
options.EnablePrivileges = true; 
options.Timeout = new TimeSpan(0, 60, 0); 
ManagementScope scope = new ManagementScope("\\\\IP\\root\\cimv2", options); 
+0

Ich glaube, ich kann nicht dcom Sicherheit richtig – skhurams

+0

konfigurieren http://serverfault.com/questions/28520/which-permissions-rights-does-a-user-need- to-have-wmi-access-on-remote-maschinen – CodeCaster

+0

Ich habe alle Schritte im Artikel versucht, aber immer noch Zugang verweigert – skhurams

Antwort

0
  1. sicher auf diesen Computer Remote-Verbindungen zulassen Stellen versucht loszuwerden aktiviert.
  2. Stellen Sie sicher, dass WMI in WindowsFirewall -> Allowed Apps aktiviert ist.
  3. Stellen Sie sicher, CIMV2 Ordner von admin in WMI-Steuerung Eigenschaften accessble ist.
  4. Stellen Sie sicher, dass WMI- und RPC-Dienste ausgeführt werden.
  5. Benutzer hat Admin-Rechte auf dem Remote-System
+0

alle markierten ex cept Punkt 4 – skhurams

+0

jetzt immer diese Ausnahme Benutzeranmeldeinformationen können nicht für lokale Verbindungen (in Fernverbindung mit dem PC) verwendet werden – skhurams

+0

@skhurams Ich glaube, Sie versuchen, lokales System abzufragen, während lokales System keine Notwendigkeit Abfrage Anmeldeinformationen übergeben –

Verwandte Themen