Vyprázdnit frontu tiskárny – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vyprázdnit frontu tiskárny – .NET – Fórum – Programujte.comVyprázdnit frontu tiskárny – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
RomanZ
~ Anonymní uživatel
244 příspěvků
16. 7. 2014   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 89.24.105.–
Reklama
Reklama
p3can
~ Anonymní uživatel
312 příspěvků
16. 7. 2014   #2
-
0
-

a nejde to ani kdyz spustis celou aplikaci "jako administrátor" pres prave tlacitko mysi? z jakeho typu projektu to volas (silverlight ma treba omezene prava takze to ani myslim nejde napr.)?

Nahlásit jako SPAM
IP: 77.92.213.–
RomanZ
~ Anonymní uživatel
244 příspěvků
17. 7. 2014   #3
-
0
-

#2 p3can
Ne, spustit to jako administrator nepomaha, chyba je stale stejna. Jde o winforms aplikaci, .net 4.0, a po nasazeni do produkce bude mit prava jako obycejny uzivatel, mozna jeste mensi.

Nahlásit jako SPAM
IP: 79.127.137.–
RomanZ
~ Anonymní uživatel
244 příspěvků
17. 7. 2014   #4
-
0
-

Možná jsem to vyřešil. Spláchnout celou frontu nejde, ale zdá se, že mi funguje projít postupně úlohy v té frontě a zrušit je jednu po druhé:

if (printerQueue.NumberOfJobs > 0)
                {
                    //printerQueue.Purge(); nelze, access denied
                    PrintJobInfoCollection jobs = printerQueue.GetPrintJobInfoCollection();
                    foreach (PrintSystemJobInfo job in jobs)
                    {
                        job.Cancel();
                    }
                }

Někde jsem četl, že lze zrušit jen dokumenty, které sám tisknu (k cizím dokumentům nemám právo), ale teď to zkouším a ruší mi to vše. Jde o lokální tiskárnu, přihlášen jsem jako administrátor - nevím jestli to má vliv.

Nahlásit jako SPAM
IP: 89.24.105.–
RomanZ
~ Anonymní uživatel
244 příspěvků
17. 7. 2014   #5
-
0
-

Tak ještě to nebylo ono. Předchozí sice fungovalo, frontu to vymetlo, ale při ukončování se zavolalo dispose na localPrintServer a tam to opět padalo na nějaká práva. Nepovedlo se mi to vyřešit, nicméně zachránilo mne to, že k defaultní tiskové frontě se dá dostat i bez vytvoření serveru (přes statickou metodu):

PrintQueue printQueue = LocalPrintServer.GetDefaultPrintQueue();
if (printQueue != null)
{
    PrintJobInfoCollection jobs = printQueue.GetPrintJobInfoCollection();
    foreach (PrintSystemJobInfo job in jobs)
    {
        job.Cancel();
    }
}

Teď už je to snad dobře.

Nahlásit jako SPAM
IP: 89.24.105.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý