2012-05-21 16 views
6

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

.net में System.Printing असेंबली का उपयोग करके मैं अपनी खुद की प्रिंट कतार में नौकरी जोड़ने में सक्षम हूं, इसलिए मैं उस हिस्से पर ध्वनि हूं। मेरे प्रिंट कोड इस तरह दिखता है:

private void RunPrintJob(string myFileName) 
    { 
     PrintServer ps = new PrintServer(@"\\printatron"); 
     PrintQueue queue = new PrintQueue(ps, "psandqueues"); 
     try 
     { 
      PrintSystemJobInfo pj = queue.AddJob(myFileName); 
      Stream myStream = pj.JobStream; 
      Byte[] myByteBuffer = GenerateBufferFromFile(myFileName);    myStream.Write(myByteBuffer, 0, myByteBuffer.Length); 
      myStream.Close(); 
     } 
     catch (Exception ed) 
     { 
      Debug.WriteLine(ed.Message); 
      if (ed.InnerException != null) 
      { 
       Debug.WriteLine(" -> " + ed.InnerException); 
      } 
      result = false; 
     } 
     queue.Commit(); 
    } 

तो मैं अपने केन्द्र बनाए गए दस्तावेज़ों है, मुझे पता है जो उपयोगकर्ता उनके निर्माण के लिए जिम्मेदार था और मैं उन्हें प्रिंटर पर भेज सकते हैं।

मुझे अब जो चाहिए वह प्रिंटर पर उन उपयोगकर्ताओं के साथ भेजने का एक तरीका है जिन्होंने उन्हें अपने उपयोगकर्ता के रूप में सेट किया है। प्रिंट कतार के माध्यम से ऐसा करने का कोई तरीका है? मुझे पता है कि यह PrintSystemJobInfo.Submitter संपत्ति से पठनीय है, लेकिन यह केवल पढ़ने के लिए है। यदि नहीं, तो हर बार उपयोगकर्ता अपना पासवर्ड बदल जाता है मैं उत्तरार्द्ध मामले में प्रतिरूपण के माध्यम से और यदि ऐसा है तो यह मुझे क्या करना होगा क्या मैं उपयोगकर्ता पासवर्ड के एक समूह के स्टोर करने के लिए होने से बचने के लिए कर सकते हैं और सॉफ्टवेयर विफल? यही कारण है कि संचालन के एक बहुत अनाड़ी तरीका होगा यह की तरह लगता है, लेकिन इस गतिविधि के रूप में वर्तमान में सहभागी अन्य क्या विकल्प हैं नहीं किया जाता है?

+0

मैं इस का जवाब सुनने के लिए दिलचस्पी हो चाहते हैं, लेकिन मतलब समय में मैं एक अलग दृष्टिकोण अंततः ले लिया के रूप में मैं एक उपयोगी (सहित उपकरण मैं उपलब्ध था के साथ सर्वर पर मुद्रण कार्य स्पूल के लिए रास्ता नहीं मिल सका .net 2.0, यकीन नहीं करता है, तो System.Printing सामान यहाँ मदद की है |) इसलिए मैं उस पृष्ठभूमि में बैठे एक स्थानीय एप्लिकेशन की स्थापना करके बजाय समस्या हल, मुद्रण के लिए डॉक्स लिया गया और उन्हें उपयोगकर्ता की मशीन से मुद्रित, कोई भी अनुमतियां से परहेज समस्या का। – glenatron

+0

तो क्या आप अपना प्रश्न तब अपडेट करना चाहते हैं? –

उत्तर

3

मैं कुछ ऐसा कर रहा हूं। प्रतिरूपण बहुत खराब नहीं है, अगर प्रक्रिया में आपको प्रतिरूपण के स्तर को प्राप्त करने के लिए पर्याप्त अनुमतियां हैं (उदा। प्रतिरूपण या प्रतिनिधिमंडल बनाम पहचान)।

public static bool GetImpersonationToken(string UPN, out IntPtr dupToken) 
    { 
     dupToken = IntPtr.Zero; 
     WindowsImpersonationContext impersonationContext = null; 

     bool result = false; 
     try 
     { 
      WindowsIdentity wid = new WindowsIdentity(UPN); 
      impersonationContext = wid.Impersonate(); 
      result = DuplicateToken(wid.Token, 2, ref dupToken) != 0; 
     } 
     finally 
     { 
      if (impersonationContext != null) 
       impersonationContext.Undo(); 
     } 

     return result; 
    } 

नोट::

यहाँ है कि मैं क्या प्रतिरूपित करने के लिए करना है यह है कि टोकन हैंडल को साफ करने के बुला विधि की जिम्मेदारी है।

मैं उपयोगकर्ता ईमेल पर आधारित एलडीएपी क्वेरी से यूपीएन को हल करता हूं (आमतौर पर वे वही होते हैं, लेकिन अक्सर पर्याप्त नहीं होते हैं)।

लेकिन मुझे बाइट सरणी के साथ कुछ समस्याएं आ रही हैं जिनमें मैं गुजर रहा हूं। मैंने फ़ाइल.रेड ऑलबाइट्स को आजमाया, लेकिन इससे प्रिंटर को गंदगी से बाहर निकलने का कारण बनता है। कुछ विशेष एन्कोडिंग GenerateBufferFromFile में होने की जरूरत है कि है?

** अद्यतन **

लग रहा है सीधे JobStream के साथ काम करने में समस्याओं के के एक झुंड की तरह देखते हैं: मैं हालांकि

Is PrintSystemJobInfo.JobStream broken?

तो मैं सिर्फ फाइल करने के लिए लिखने के लिए जा रहा हूँ, उस से बचने की उम्मीद कर रहा था।

संबंधित मुद्दे