2011-05-30 8 views
6

मैं अपना "प्रिंटर मॉनीटरिंग" एप्लिकेशन अपडेट कर रहा हूं। पहले यह एप्लिकेशन विंडोज 2000 सर्वर पर सफलतापूर्वक चलाता है। अब हम विंडोज 7 सर्वर में स्थानांतरित हो गए हैं। विंडोज 7 पर हमारे "प्रिंट मॉनीटर" एप्लिकेशन दुर्घटनाग्रस्त हो जाता है। जब मैंने इसे डीबग किया, तो मैंने पाया कि हमारे SetJob फ़ंक्शन निम्न अपवाद फेंकता है:विंडोज प्रिंटर स्पूलर setjob फ़ंक्शन विंडोज -7 के लिए काम नहीं कर रहा है?

पैरामीटर गलत है।

क्या किसी को इसके बारे में कुछ पता है?

समारोह कॉल: कैसे समारोह का निर्माण किया जाना है और कैसे parsmeters कहा जाता है

<DllImport("winspool.drv", EntryPoint:="SetJob", _ 

SetLastError:=True, CharSet:=CharSet.Ansi, _ 

ExactSpelling:=False, _ 

CallingConvention:=CallingConvention.StdCall)> _ 

Public Function SetJob _ 

(<InAttribute()> ByVal hPrinter As IntPtr, _ 

<InAttribute()> ByVal dwJobId As Int32, _ 

<InAttribute()> ByVal Level As Int32, _ 

<InAttribute()> ByVal lpJob As IntPtr, _ 

<InAttribute(), MarshalAs(UnmanagedType.U4)> ByVal dwCommand As PrintJobControlCommands _ 

) As Boolean 
+0

वह API कॉल विंडोज 7 पर नहीं बदला है। उस अपवाद का आमतौर पर मतलब है कि आपके पास या तो एक अवैध जॉबआईडी है, या जॉबआईडी उस प्रिंटर हैंडल से जुड़ा नहीं है। विंडोज़ विस्टा से एमएस ने क्लाइंट साइड रेंडरिंग (सीएसआर) को प्रिंटिंग दक्षता में सुधार के लिए पेश किया, इसमें स्पूलर के माध्यम से कई बार चलने वाली नौकरियों की उपस्थिति हो सकती है, हो सकता है कि आपके कोड में कुछ और बग कहीं और मेल नहीं खाए। – BBoy

+1

जब आप "विंडोज 7 सर्वर" कहते हैं तो क्या हम आपको "विंडोज सर्वर 2008 आर 2" का अनुमान लगा सकते हैं? मैं टैग पर आधारित मान रहा हूँ। –

+1

क्या आपको ईवेंट लॉग में कोई प्रविष्टियां मिलती हैं जो ईवेंट आईडी प्रदान करती है? –

उत्तर

0

कृपया एक पाश यहाँ है,:

SetJob(
    mhPrinter, 
    midJob, 
    0, 
    IntPtr.Zero, 
    PrintJobControlCommands.JOB_CONTROL_PAUSE) 'Here exception is thrown 

स्पूलर एपीआई जो हम प्रयोग

http://www.pinvoke.net/default.aspx/winspool.setjob

यह थोड़ा अलग है तो आपने इसे लागू किया। उम्मीद है कि यह मदद करेगा।