Служба работает на машине, но, конечно, не все принтеры установлены на ней. это. Даже когда принтеры установлены на аппарате, мы НЕ имеем статуса принтеров!
Единственное, что мне удалось сделать, это вынуть бумагу, распечатать тестовую страницу (блокнот), и теперь я вижу, что мне не хватает бумаги с код ниже, но, как вы понимаете, это невозможно: я не хочу отправлять тестовую страницу на все принтеры в сети каждые 10 минут или около того!
Я пытаюсь запросить PrintQueue.Refresh, но статус не обновляется, я не вижу, что лоток принтера открыт (или отсутствует бумага, или нет тонера, что бы я ни делал с принтером.)
Кстати, Win32_printer не работает не покажет мне лучший результат.
ПРИМЕЧАНИЕ.
- MonitoringWS — это веб-сервис, который может получить доступ к базе данных.
- Принтеры — это список принтеров, которые мы хотим запросить.
var printServers = GetListOfPrinterServers();
var listPrinters = printers as List ?? printers.ToList();
foreach (
var printServer in
printServers.Select(
server => new PrintServer(server, PrintSystemDesiredAccess.EnumerateServer)))
{
printServer.Refresh();
var printQueues = printServer.GetPrintQueues();
foreach (var printQueue in printQueues)
{
var queue = printQueue;
var printersFound = listPrinters.Where(p =>
string.Equals(p.PrinterName, queue.FullName,
StringComparison.OrdinalIgnoreCase));
foreach (var printer in printersFound)
{
printQueue.Refresh();
Debug.WriteLine(string.Format("{0} {1}", printQueue.FullName, printQueue.HostingPrintServer.Name) );
var pm = new MonitoringWS.PrinterMonitoring
{
FkPrinter = printer.PkPrinter,
QueueStatus = printQueue.QueueStatus,
DriverName = printQueue.QueueDriver.Name,
MonitoringDateTime = DateTime.Now
};
printerMonitorings.Add(pm);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/488 ... of-printer
Мобильная версия