2016-09-27 2 views
0

안녕하세요. 우리는 C# 프레임 워크 v4.0 asp.net mvc 응용 프로그램을 분산 구조로 작업하고 있습니다. 우리는 mysql 데이터베이스 용 이미지 Server2와 웹용 Server3 용으로 Server1을 사용하고 있습니다. 내 임무는 세 개의 서버 모두에서 사용 가능한 디스크 공간과 전체 디스크 공간을 확보하고 웹 관리 페이지에 표시하는 것입니다. WMI를 사용하여 localhost 용 디스크 공간을 표시하는 방법을 알고 있습니다. 정적 IP를 가진 Server1 및 Server3 디스크 정보를 표시하려고합니다 (세 개의 서버 모두 원격 데스크톱 및 공유가 가능함). 하지만 난 여기 원격 서버에서 디스크 정보 가져 오기 C#

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

내 코드

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(); 

하지만 컴파일이 scope.Connect을 일렬로 갈 때()는 얻을; 다음은 예외 액세스 내가 this article using Dcomcnfg.exe security을 시도

을 거부하지만 여전히 캔트 나는 또한 확인 이 컴퓨터에 원격 연결을 허용합니다

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

는 내가 제대로 – skhurams

+0

을 DCOM 보안을 구성하지 못할 생각 http://serverfault.com/questions/28520/which-permissions-rights-does-a-user-need- 원격 시스템에 대한 관리자 권한이 to-have-wmi-access-on-remote-machines – CodeCaster

+0

기사의 모든 단계를 시도했지만 여전히 액세스가 거부되었습니다. System.Management.ManagementException.ThrowWithExtendedInfo (ManagementStatus errorCode)에서 스택 추적 정보를 – skhurams

답변

0
  1. 을 시도

    이 예외 없애 던졌습니다 사용 가능.

  2. Windows 방화벽 -> 허용 된 응용 프로그램에서 WMI가 활성화되어 있는지 확인하십시오.
  3. WMI 제어 등록 정보에서 CIMV2 폴더가 adminble에 액세스 할 수 있는지 확인하십시오.
  4. WMI 및 RPC 서비스가 실행 중인지 확인하십시오.
  5. 사용자는
+0

모두 체크 됨 cept point 4 – skhurams

+0

이제이 예외가 발생합니다. 사용자 자격 증명은 로컬 연결 (컴퓨터에 원격으로 연결)에 사용할 수 없습니다. – skhurams

+0

@ skhurams 로컬 시스템에 쿼리하는 중 로컬 시스템에 질의하는 동안 자격 증명을 전달할 필요가 없습니다. –

관련 문제