2015-02-26 11 views
8

में टॉपशेल्फ़ चल रहा है या नहीं, यह पता लगाने के लिए कि मैं विंडोज़ सेवा के लिए फ्लुएंटशेड्यूल के साथ संयुक्त टॉपस्हेल्फ़ का उपयोग कर रहा हूं।कंसोल मोड

हालांकि, मैं करने के लिए सक्षम होना चाहते हैं परीक्षण रन आवेदन बस शुरू करने और FluentSchedule कोड है कि टाइमर आदि

सेट पर अमल वहाँ एक रास्ता कमान से exe फ़ाइल चलाना है नहीं करने के लिए लाइन (यानी 'इंस्टॉल' कमांड के बिना) TopShelf से जांचने के लिए कि यह कंसोल मोड में चल रहा है?

+0

यदि आप पहले से नहीं हैं, तो मैं मेलिंग सूची, https://groups.google.com/forum/#!members/topshelf-discuss पर पूछूंगा। मुझे नहीं लगता कि एक स्पष्ट तरीका है। इसके अलावा आप गिटहब पर एक समस्या खोल सकते हैं: https://github.com/topshelf/topshelf – Travis

+0

सीधे टॉपशेल्फ़ से संबंधित नहीं है, लेकिन http://stackoverflow.com/questions/2397162/how-to-determine पर एक नज़र डालें -इफ-स्टार्ट-इन-ए-विंडोज-सर्विस –

उत्तर

12

यह एक हैक है, लेकिन आप HostControl इंटरफेस को ConsoleRunHost पर डालने का प्रयास कर सकते हैं, और यदि यह वह प्रकार है, तो आप कंसोल एप्लिकेशन के रूप में चल रहे हैं।

यह आदर्श नहीं है, निश्चित रूप से, लेकिन निश्चित रूप से आप इसे कम बदसूरत बनाने के लिए एक विस्तार विधि में इसे छुपा सकते हैं।

public static bool IsRunningAsConsole(this HostControl control) 
{ 
    return control is ConsoleRunHost; 
} 
+2

मुझे रनटाइम पर होस्टकंट्रोल के रूप में संदर्भित करने के लिए और कब संदर्भित करने में कठिनाई हो रही है। HostFactory.Run (x => आदि) को कॉल करने से पहले मैं क्या संदर्भ दे सकता हूं जो होस्टकंट्रोल होगा? या मैं इसे बहुत जल्दी कर रहा हूँ? क्या मुझे सेवा कक्षा में यह जांचना चाहिए कि मैं x.Service में तत्काल हूं और एक बार फिर, मैं उस कक्षा में क्या संदर्भ दे सकता हूं जो होस्टकंट्रोल होगा? – Redeemed1

+0

आप इसे बहुत जल्दी कर रहे हैं। HostControl आपके वास्तविक सेवा कोड के अंदर है। आपके द्वारा उल्लिखित धाराप्रवाह अनुसूची कोड को टॉपशेल्फ़ द्वारा शुरू की जा रही सेवा के बाहर नहीं बनाया जाना चाहिए। अन्यथा यह इंस्टॉल, अनइंस्टॉल, और अन्य टॉपशेल्फ़ कमांड के लिए शुरू हो जाता है। –

+0

ठीक है, धन्यवाद @ क्रिसपट्टनसन, मैं इसे – Redeemed1

7

आप Environment.UserInteractive का उपयोग कर सकते हैं। तकनीकी रूप से यह 100% मामलों में काम नहीं करेगा क्योंकि उपयोगकर्ता-इंटरैक्टिव मोड में सेवा चलाने के लिए संभव है, लेकिन यह एक मामूली मामला है।

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