2010-02-27 5 views
18

मेरे पास एक सर्वर पर एक विंडोज़ सेवा (सी #) स्थापित है जो प्रत्येक 10 मिनट को निष्पादन योग्य फ़ाइल (सी #) लॉन्च करता है ताकि कुछ छवियों को एक निर्देशिका से दूसरी निर्देशिका में संसाधित किया जा सके। किसी भी उपयोगकर्ता के साथ कोई बातचीत की आवश्यकता नहीं है। फिर भी, सेवा चलाने के लिए निष्पादन योग्य फ़ाइल के रूप में निष्पादन योग्य फ़ाइल के बाद, मुझे "सेवा को डेस्कटॉप" के साथ बातचीत करने की अनुमति दें "चेकबॉक्स जिसे insecure and bad practice माना जाता है। मैं इस समस्या के बारे में कैसे जाउंगा? मैं निष्पादन मेरी खिड़कियों सेवा से अलग कर दिया क्योंकिवैकल्पिक "डेस्कटॉप के साथ बातचीत करने की अनुमति दें" के लिए वैकल्पिक?

  • इसे डिबग करने के लिए आसान बना देता है और एक पूर्ण खिड़कियों सेवा पुनर्वितरित की आवश्यकता नहीं है करना चाहते।
  • कभी-कभी मैं कई निष्पादन योग्य फ़ाइलों को विभिन्न अंतराल पर लॉन्च करने के लिए उसी विंडो का उपयोग करता हूं (लेकिन सभी प्रोजेक्ट से संबंधित हैं)।

संपादित करें: एक बार

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4b8304c3, 
faulting module KERNEL32.dll, version 6.0.6002.18005, time stamp 0x49e03821, 
exception code 0xc0000142, fault offset 0x00009eed, process id 0x10ec, 
application start time 0x01cab736950a64b5. 

:

डेस्कटॉप के साथ बातचीत सक्षम नहीं किया जाता है, सांत्वना आवेदन सही ढंग से क्रियान्वित नहीं है हो और Windows लॉग्स अंदर निम्न त्रुटि दिखाई देता है डेस्कटॉप इंटरैक्शन सक्षम है, एप्लिकेशन सामान्य रूप से निष्पादित हो जाता है।

कोई विचार?

आपके समय के लिए बहुत बहुत धन्यवाद।

+0

क्या यह Vista और बाद में है? –

+0

डिबगिंग हिस्सा एक अच्छा कारण नहीं है। आपके पास निष्पादन योग्य हो सकता है और सेवा दोनों एक आम असेंबली का उपयोग करती है जिसमें सभी कार्यक्षमताएं होती हैं। –

+0

हां, विंडोज़ सेवा विंडोज सर्वर 2008 वेब संस्करण चल रही है। विंडोज सेवा और निष्पादन योग्य विजुअल स्टूडियो 2008 के साथ .NET Framework 3.5 – jdecuyper

उत्तर

10

आप विस्टा और बाद के प्रयोग कर रहे हैं और तुम सच में नहीं है उपयोगकर्ता के साथ किसी भी बातचीत की जरूरत है, लेकिन अमल करने के लिए एक इंटरैक्टिव exe है, तो Session 0 isolation feature के बारे में 'बुरा चिंताओं में से कुछ को कम मदद करनी चाहिए अभ्यास 'डेस्कटॉप पर बातचीत करने पर अभ्यास करें (जिसमें सत्र 0 में कोई भौतिक कंसोल नहीं है)।

यह सत्र 0 अलगाव, अनियंत्रित उपयोगकर्ताओं को आपकी सेवा पर Shatter Attacks प्रदर्शन करने से रोक देगा क्योंकि उन्हें विभिन्न सत्रों में उनके इंटरैक्टिव डेस्कटॉप मिलते हैं। टूटने के हमले मुख्य कारण हैं कि यह 'डेस्कटॉप के साथ बातचीत' को बुरा अभ्यास माना जाता था और यदि आप Vista या बाद में उपयोग कर रहे हैं, तो यह ठीक होना चाहिए यदि आप इससे बच नहीं सकते हैं (या इसे करने के लिए बहुत अधिक प्रयास करना होगा)।

तो, यदि चीजें ठीक तरह से काम कर रही हैं, तो आप शायद ठीक हैं।

बेशक, ओएस अपडेट के बाद, चीजें सिर्फ काम करना बंद कर सकती हैं, इसलिए संभवतः पारस्परिकता पर निर्भरता को स्थानांतरित करने के लिए तैयार होना बेहतर है, क्योंकि आपको वास्तव में इसकी आवश्यकता नहीं है।

+0

सत्र 0 अलगाव बहुत समझ में आता है और किसी भी तरह से मुझे मेरी सेवा के सुरक्षा निहितार्थ के बारे में थोड़ा कम चिंता करता है। लेकिन जैसा कि आपने सही ढंग से उल्लेख किया है, अंतःक्रियाशीलता छोड़ना बेहतर होगा। प्रक्रिया बनाते समय, मैंने पहले से ही 'UseShellExecute' गुणों को सत्य और 'CreateNoWindow' को गलत पर सेट करने का प्रयास किया है, लेकिन सेवा को अभी भी डेस्कटॉप इंटरैक्शन की आवश्यकता है। – jdecuyper

+0

क्या आपने यह सही टाइप किया था? CreateNoWindow * true * होना चाहिए और मुझे लगता है कि UseShellExecute शायद गलत होना चाहिए (हालांकि UseShellExecute कोई फर्क नहीं पड़ता)। – Weeble

+0

उस टाइपो के बारे में क्षमा करें! CreateNoWindow वास्तव में सत्य पर सेट है। – jdecuyper

2

यदि आप कर सकते हैं, तो मैं आपके निष्पादन योग्यों को फिर से लिखने की अनुशंसा करता हूं जो आउटपुट विंडो का उपयोग न करने के लिए चाल को संभालते हैं। यदि वे मानक हैं, कोई आउटपुट वाले कंसोल अनुप्रयोग हैं, तो आप "सेवा के साथ बातचीत करने की अनुमति दें" की आवश्यकता के बिना उन्हें सेवा के भीतर से निष्पादित कर सकते हैं। यह आपको आपकी सेवा में किए गए किसी भी बदलाव के बिना सभी लाभ प्रदान करता है।

+0

आप एप्लिकेशन के आउटपुट को हटाने के बारे में कैसे जाएंगे? जहां आप वीबल के समान समाधान के बारे में सोच रहे हैं? धन्यवाद। – jdecuyper

+0

हाँ, यह मूल रूप से मेरा विचार था। यदि यह सिर्फ एक कंसोल एप्लिकेशन है, तो आपको डेस्कटॉप परस्पर संपर्क करने की आवश्यकता नहीं है। यदि आप Windows अनुप्रयोग का उपयोग कर रहे हैं, हालांकि, यह काम नहीं करेगा ... –

2

क्या उपप्रोसेसर सिर्फ एक कंसोल एप्लिकेशन है? मैंने विंडोज सेवाओं को नहीं लिखा है, लेकिन मुझे लगता है कि शायद खिड़की के बिना उपप्रोसेस शुरू करना पर्याप्त होगा। प्रक्रिया का ओवरलोड का उपयोग करें। स्टार्ट जो ProcessStartInfo लेता है और ProcessStartInfo.CreateNoWindow को सत्य पर सेट करें।

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

+0

धन्यवाद आपके लिंक के लिए बहुत कुछ। मैंने पहले ही इसे आज़माया है लेकिन इसे अभी भी सक्षम होने के लिए चेकबॉक्स की आवश्यकता है। – jdecuyper

+0

अफसोस की बात है कि इस समय मुझे विंडोज मशीन तक पहुंच नहीं मिली है। क्या आप जानते हैं कि उपप्रोसेस शुरू हो रहा है और फिर असफल रहा है या बस शुरू नहीं हुआ है? और क्या यह एक कंसोल एप्लीकेशन है, या कुछ और? – Weeble

+0

यह एक सी # कंसोल अनुप्रयोग है। मैंने अपना प्रश्न संपादित किया और लॉग संदेश प्राप्त करने वाले त्रुटि संदेश को जोड़ा। – jdecuyper

4

मुझे पता है कि यह थोड़ा देर हो चुकी है लेकिन इस परिस्थिति में मैं कार्य शेड्यूलर का उपयोग करूंगा और विंडोज़ सेवा से परेशान नहीं होगा। कार्य शेड्यूलर में शेड्यूलिंग विकल्पों का एक व्यापक सेट होता है और बिना किसी समस्या के कंसोल अनुप्रयोग चला सकता है।