2009-04-07 10 views
1

プリンタポ​​ートアドレスを取得する際に奇妙な問題が発生しています。 Win32_TCPIPPrinterPortのすべてのエントリを取得すると、IPアドレスを持つはずのHostAddressフィールドは通常空白/ヌルになります。ポート名だけに値があります。少し見知らぬものにするために、特定のポートがどのプリンタでも使用されていない場合は、HostAddressに適切な値が設定されます。Win32_TCPIPPrinterPortからHostaddressを取得する際の問題

C#コードはシンプルで、このようなものになります。 IP_192.168.1.100、 printerportxyz、

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"]) 
     ); 
} 

私はまた、WSH/VBSで同じことを試みたが、同じ動作を見ました。

答えて

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"])); 
} 
関連する問題