Проблема при получении хост-адреса из Win32_TCPIPPrinterPort - PullRequest
1 голос
/ 07 апреля 2009

У меня странная проблема с получением адресов портов принтера. Когда я получаю все записи в Win32_TCPIPPrinterPort, поле HostAddress (которое должно иметь IP-адрес) обычно пустое / пустое, значение имеет только имя порта. Чтобы сделать его немного странным, если конкретный порт не используется каким-либо принтером, ТОГДА 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 и видел такое же поведение.

1 Ответ

4 голосов
/ 27 августа 2009

В итоге мне пришлось снова посетить это и предпринять еще одну попытку. Я обнаружил, что во встроенном сценарии управления prnport.vbs проблем не было - просматривая его, я увидел, что при установлении соединения WMI он имел oService.Security_.Priveleges.AddAsString "SeLoadDriverPrivilege"

решение в C # в итоге указало WMI ConnectionOptions и установило для EnablePrivileges значение true. Тогда HostAdress больше не был нулевым для неиспользуемых или используемых портов.

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"]));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...