2011-03-01 13 views
18

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

मुझे यह आलेख http://www.boyce.us/windows/servertipcontent.asp?ID=7 मिला जो ऐसा करने के लिए रजिस्ट्री प्रविष्टि जोड़ने के बारे में बात करता है। मैं जानना चाहूंगा कि ऐसा करने के लिए सी # तरीका है या नहीं?

अद्यतन:

उपर्युक्त प्रश्न पर जोड़ा जा रहा है। यहाँ एक और परिदृश्य है। इंस्टॉलस्ड का उपयोग करके सेवाएं इंस्टॉल की जा रही हैं जिन्हें प्रोजेक्टिनलर की आवश्यकता नहीं है। ऐसा लगता है कि इंस्टॉलशील्ड सर्विसबेस क्लास से प्राप्त कक्षाओं की तलाश करता है और प्रत्येक सेवा को स्थापित करता है। इस तरह के परिदृश्य में निर्भरता कैसे जोड़ें?

उत्तर

26

आप अपने प्रोजेक्ट के सर्विस इंस्टालर घटक के लिए ServiceInstaller.ServicesDependedOn Property खोज रहे हैं।

लेख की टिप्पणी अनुभाग से

(और मैं भाग में आपकी रुचि है बोल्ड):

एक सेवा अन्य सेवाओं के से पहले ही शुरू कर सकते हैं चल रहा हो की आवश्यकता होती है सकते हैं। इस संपत्ति से जानकारी रजिस्ट्री में किसी कुंजी के लिए लिखी गई है। (मामले स्वत: स्टार्टअप के में या प्रणाली,) उपयोगकर्ता सेवा को चलाने के लिए कोशिश करता है, सेवा नियंत्रण प्रबंधक (एससीएम) सत्यापित करता है कि सरणी में सेवाओं में से प्रत्येक को पहले से ही किया गया है शुरू कर दिया।

यदि सरणी में कोई भी सेवा नहीं चल रही है, तो एससीएम उन्हें शुरू करने का प्रयास करता है। इसमें मैन्युअल स्टार्टटाइप वाली सेवाएं शामिल हैं।

यदि कोई सेवा जिस पर यह सेवा प्रारंभ करने में विफल रहता है, तो यह सेवा शुरू नहीं होगी। एक अपवाद नहीं है अगर सिस्टम शुरू नहीं हुआ है क्योंकि इसका पता लगाने के लिए सिस्टम स्तर पर कोई अपवाद हैंडलिंग नहीं है। सेवा को संभालने का निर्णय लें विफलताओं को शुरू करें और इसे अपने कोड में कार्यान्वित करें। आम तौर पर, एक संवाद उपयोगकर्ता को स्टार्टअप पर दिखाई देता है यदि कोई सेवा प्रारंभ करने में विफल हो जाती है।

यदि सेवा शुरू नहीं होती है, तो प्रविष्टि एप्लिकेशन ईवेंट लॉग पर लिखी गई है।

सेवाएं जिन पर यह सेवा पर निर्भर करता है, उसी पर निष्पादन योग्य होने की आवश्यकता नहीं है।

+0

+1 - मैं क्या कहने जा रहा था;) – Oded

+0

क्या आप कृपया कर सकते हैं। संपादित प्रश्न का उत्तर दें। धन्यवाद। – stackoverflowuser

+0

@ स्टैक: मुझे खेद है कि यह थोड़ी देर के बाद से मैंने इंस्टालशल्ड का उपयोग किया है (और जब मैंने विंडोज सेवाओं के लिए नहीं किया था) तो मुझे डर है कि मैं बहुत मदद नहीं कर सकता। मैंने Google को यह करने का प्रयास किया और [इस] (http://community.installshield.com/showthread.php?t=162302&page=4) के साथ आया, जो _might_ सहायक हो! –

2

जे रिग्स 'जवाब के अलावा, यहाँ है और क्या आप serviceinstaller में जोड़ना चाहिए उदाहरण आपकी सेवा eventlog

Me.ServiceInstaller1.ServiceName = "Service1"; 
Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"}; 

जरुर पर निर्भर बनाने के लिए, यदि आप किसी अन्य सेवा निर्भरता है, 'Eventlog' को किसी और चीज़ में बदलें ..

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