У меня есть приложение, которое позволяет пользователю выбирать принтер перед печатью. Мне нужно иметь возможность, используя информацию, возвращенную из диалогового окна выбора принтера .Net, найти способ связи по SNMP напрямую с принтером. Одним из требований к моему приложению является то, что оно не отправляет на принтер никаких заданий на печать, когда принтер находится в режиме паузы, застрял, находится в автономном режиме или закончилась бумага и т. д. Я могу получить эту информацию только через SNMP для того типа принтера, который у меня есть.
Я использовал запрос WMI для получения информации о принтере, а затем получил канал связи с этим принтером, используя значения ShareName и ServerName в этом запросе WMI. Это работает уже больше года.
Недавно сетевая группа переместила мое приложение с сервера Windows 2003 на сервер Windows 2008 R2. Когда приложение находится в своем новом доме 2008 года, значения для ServerName и ShareName в запросе WMI всегда возвращаются пустыми, что делает невозможным прямой обмен данными с принтером с использованием моего существующего кода.
Есть ли у кого-нибудь другой способ прямого взаимодействия с принтерами, основанный только на том, что пользователь выбирает принтер в диалоговом окне выбора принтера .Net? Для целей этого приложения мы можем с уверенностью ожидать, что принтер всегда будет одного типа и всегда будет подключен к сети.
Вот запрос WMI, который я использовал:
"SELECT * from Win32_Printer WHERE Name LIKE '%MyPrinter'"
Ценить это.