Potřebuju vyprázdnit frontu tiskárny, která je připojena lokálně k PC. Znáte někdo funkční řešení?
Já mám zatím toto. Názvy připojených tiskáren zjistím:
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject printer in searcher.Get())
{
string printerName = printer["DeviceID"].ToString();
...
Když znám jméno tiskárny, podaří se mi podívat se do její fronty a dokonce vidím, že není prázdná:
LocalPrintServer localPrintServer = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue printerQueue = localPrintServer.ConnectToPrintQueue(printerName);
if (printerQueue.NumberOfJobs > 0)
{
printerQueue.Purge();
}
ovšem příkaz Purge v podmínce pak spadne kvůli právům. Vygooglil jsem tedy řešení, kde se fronta otevře s vyššími právy:
LocalPrintServer localPrintServer = new LocalPrintServer(PrintSystemDesiredAccess.AdministrateServer);
PrintQueue printerQueue = new PrintQueue(localPrintServer, printerName, PrintSystemDesiredAccess.AdministratePrinter);
Jenže to mi padá už na příkazu new PrintQueue s chybou:
Attempt by security transparent method 'MS.Internal.PrintWin32Thunk.PrinterDefaults.Dispose(Boolean)' to access security critical method 'MS.Internal.PrintWin32Thunk.PrinterDefaults.InternalDispose(Boolean)' failed.
Nepotřebuju vyřešit konkrétně tuhle chybu. Prostě hledám nejjednodušší cestu, jak smazat tiskové fronty, a tady jsem zakysnul. Jestli máte jiné vyzkoušené řešení, budu za něj rád.