में विफल रहता है मेरे पास सी # .NET में लिखा गया एक विंडोज सेवा अनुप्रयोग है। इस एप्लिकेशन का उपयोग स्थानीय सॉफ्टवेयर प्रिंटर को दस्तावेज़ प्रिंट करके पीडीएफ उत्पन्न करने के लिए किया जाता है जो पीडीएफ उत्पन्न करता है। यह विंडोज एक्सपी और विंडोज 7 पर अच्छी तरह से काम करता है। दुर्भाग्य से मैंने पाया कि विंडोज 8 पर यह विफल हो जाता है। तब मुझे पता चला कि विंडोज 8 पर किसी भी (यहां तक कि भौतिक) प्रिंटर को प्रिंट करना विफल रहता है जब मैं अपनी सेवा से प्रिंट करता हूं। मेरे कार्यक्रम में काम करने के लिए क्या गुम है? मैं इस तरह से मुद्रण कर रहा हूँ:विंडोज 8 पर विंडोज़ सेवा से प्रिंटिंग
FlowDocument document = MyDocument;
var source = document as IDocumentPaginatorSource;
var documentPaginator = source.DocumentPaginator;
using (var printServer = new LocalPrintServer())
{
PrintQueue queue = printServer.GetPrintQueue(printerName);
XpsDocumentWriter docWriter = PrintQueue.CreateXpsDocumentWriter(queue);
// Print ticket - Approach 1
// PrintTicket printTicket = queue.DefaultPrintTicket.Clone();
// Print ticket - Approach 2
var printTicket = new PrintTicket
{
PageOrientation = PageOrientation.Landscape,
PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4), // set size of media (paper)
};
documentPaginator.PageSize = new Size(document.PageWidth, document.PageHeight);
docWriter.Write(documentPaginator, printTicket);
}
सेवा के बिना 'डेस्कटॉप के साथ बातचीत' 'सिस्टम खाते' पर सेट है (लेकिन मैं वह भी या स्थानीय उपयोगकर्ता के रूप में प्रवेश करने की कोशिश की)।
यह विंडोज 8 पर अपवाद में परिणाम का उपयोग करते समय 'प्रिंट टिकट - दृष्टिकोण 1':
System.Printing.PrintQueueException: PrintTicket provider failed to bind to printer. Win32 error: -2147467231
at MS.Internal.Printing.Configuration.PTProvider..ctor(String deviceName, Int32 maxVersion, Int32 clientVersion)
at MS.Internal.Printing.Configuration.PTProviderBase.Create(String deviceName, Int32 maxVersion, Int32 clientVersion)
at System.Printing.PrintTicketManager..ctor(String deviceName, Int32 clientPrintSchemaVersion)
at System.Printing.PrintQueue.get_DefaultPrintTicket()
का उपयोग करते हुए 'प्रिंट टिकट - दृष्टिकोण 2':
Exception encountered: System.Printing.PrintQueueException: Fehler beim Binden des PrintTicket-Anbieters an den Drucker. Win32-Fehler: -2147467231
bei MS.Internal.Printing.Configuration.PTProvider..ctor(String deviceName, Int32 maxVersion, Int32 clientVersion)
bei MS.Internal.Printing.Configuration.PTProviderBase.Create(String deviceName, Int32 maxVersion, Int32 clientVersion)
bei System.Printing.PrintTicketManager..ctor(String deviceName, Int32 clientPrintSchemaVersion)
bei System.Printing.PrintQueue.get_UserPrintTicket()
bei System.Printing.PrintQueue.get_CurrentJobSettings()
bei System.Printing.PrintQueue.CreateSerializationManager(Boolean isBatchMode, Boolean mustSetJobIdentifier)
bei System.Windows.Xps.XpsDocumentWriter.BeginWrite(Boolean batchMode, Boolean asyncMode, Boolean setPrintTicketHandler, PrintTicket printTicket, PrintTicketLevel printTicketLevel, Boolean printJobIdentifierSet)
bei System.Windows.Xps.XpsDocumentWriter.Write(DocumentPaginator documentPaginator, PrintTicket printTicket)
मुझे लगता है कि सेवा कहेंगे उन प्रिंटर को खोजने में सक्षम है क्योंकि जब मैंने गैर-मौजूदा प्रिंटर पर प्रिंट करने का प्रयास किया है और मुझे "अवैध प्रिंटर नाम" अपवाद मिला है।
यहाँ मैं कुछ संबंधित सवालों के खुद के लिए रखना होगा: Printing from a Windows Service, Printing from a Windows Service, http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/b74bd27d-1cc8-4fca-a6de-2cd1371cf3b7/,
कमतर संबंधित: Printing from a .NET Service,
संपादित करें:
मामले किसी में में रुचि रखता है कोशिश कर रहा है - यहां मेरा नमूना सेवा अनुप्रयोग है जो कॉन्फ़िगर फ़ाइल में चयनित प्रिंटर को सरल दस्तावेज़ मुद्रित करने का प्रयास करता है: http://bin.mypage.sk/FILES/PrintTestService.rar
संपादन 2:
दिलचस्प।
using (var printDocument = new PrintDocument())
{
printDocument.PrinterSettings.PrinterName = printerName;
printDocument.Print();
}
दुर्भाग्य से यह एक बड़े GDI + कोड System.Drawing.Graphics पुस्तकालय जो मेरे कोड है कि सिस्टम के रूप में पृष्ठवार दस्तावेज़ का उत्पादन साथ संगत नहीं है का उपयोग कर रहा है: मैं एक अलग मुद्रण कोड की कोशिश की तो कोई त्रुटि है। विंडोज़। मीडिया। विज़ुअल ऑब्जेक्ट्स। इसलिए मैं इसका उपयोग अपने दस्तावेज़ को मुद्रित करने के लिए नहीं कर सकता जबतक कि मैं अपने दस्तावेज़ के पेजिंग को स्क्रैच से बनाने के दो सप्ताह बिताना नहीं चाहता।
edit3:
इस मुद्दे के बारे में यहाँ चर्चा है: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/96e7fc10-3f08-4808-b748-692e30377293 यह anyCPU 'मंच का उपयोग करने के लिए वहाँ एक' वैकल्पिक हल 'है। यह कामकाज वास्तव में काम करता है (मैंने कोशिश की) लेकिन यह मेरे मामले में प्रयोग योग्य नहीं है जब मेरी सेवा x86 होने की आवश्यकता है। मैंने वास्तविक समाधान खोजने के लिए हमारी कंपनी के माध्यम से एमएस समर्थन से संपर्क किया है।
आपको डेस्कटॉप प्लस के साथ बातचीत करने के लिए सेवा को कॉन्फ़िगर करने का प्रयास करना चाहिए मशीन पर इंटरैक्टिव सेवाएं सक्षम करें। यहां देखें http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502.aspx Windows 8 में नोट NoInteractiveServices रजिस्ट्री कुंजी का मान डिफ़ॉल्ट रूप से 1 है, आपको इसे 0 –
पर सेट करना चाहिए @ SimonMourier: मैंने रजिस्ट्री ध्वज को 0 पर संशोधित किया है और फिर रीबूट किया है और मैंने सेवा पर 'डेस्कटॉप से बातचीत करने की अनुमति दें' की जांच की है। परिणाम वही है। – MiroJanosik