2009-04-07 6 views
1

프린터 포트 주소를 검색하는 데 이상한 문제가 있습니다. Win32_TCPIPPrinterPort에서 모든 항목을 가져 오면 HostAddress 필드 (IP 주소가 있어야 함)는 대개 공백/null이며 포트 이름 만 값을 갖습니다. 조금 이상하게 만들려면 특정 포트가 프린터에서 사용 중이 아니면 HostAddress에 적절한 값이 있어야합니다.Win32_TCPIPPrinterPort에서 Hostaddress를 가져 오는 중 문제가 발생했습니다.

C# 코드는 간단하며 다음과 같은 결과가 나타납니다. IP_192.168.1.100, 나는 또한 WSH/VBS에서 같은 일을 시도하고, 같은 동작을 보았다

richTextBox1.Clear(); 
ManagementObjectSearcher portSearcher = new ManagementObjectSearcher("root\\CIMV2", 
    "SELECT * FROM Win32_TCPIPPrinterPort"); 
foreach (ManagementObject port in portSearcher.Get()) 
{ 
    richTextBox1.AppendText(
     String.Format("Name: {0} HostAddress: {1}", 
      port["Name"], 
      port["HostAddress"]) 
     ); 
} 

printerportxyz.

답변

3

다시 방문하여 다시 시도해야했습니다. 나는 내장 prnport.vbs 관리 스크립트에 아무런 문제가 없다는 것을 알았습니다. WMI 연결을 설정하는 동안 oService.Security_.Priveleges.AddAsString "SeLoadDriverPrivilege"가 표시되는 것을 보았습니다.

C#의 솔루션이 끝났습니다 WMI ConnectionOptions 및 EnablePrivileges를 true로 설정하십시오. 그런 다음 사용되지 않거나 사용중인 포트의 경우 HostAdress가 더 이상 null이 아닙니다.

ConnectionOptions connOptions = new ConnectionOptions(); 
connOptions.EnablePrivileges = true; 

ManagementScope mgmtScope = new ManagementScope("root\\CIMV2", connOptions); 
mgmtScope.Connect(); 

ObjectQuery objQuery = new ObjectQuery("SELECT * FROM Win32_TCPIPPrinterPort"); 
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher(mgmtScope, objQuery); 

foreach (ManagementObject mo in moSearcher.Get()) 
{ 
    Console.WriteLine(String.Format("PortName={0} HostAddress={1}", mo["Name"], mo["HostAddress"])); 
} 
관련 문제