2013-05-17 2 views
7

व्हील मैं एक विंडोज सेवा लिख ​​रहा हूं और केवल F5 दबाता हूं मुझे त्रुटि संदेश मिलता है कि मुझे इसे installutil.exe का उपयोग करके इंस्टॉल करना है और फिर इसे चलाएं। व्यवहार में इसका मतलब है हर मैं कोड की एक पंक्ति को बदलने:इसे स्थापित किए बिना विंडोज सेवा एप्लिकेशन चलाना

  1. डेवलपर कमांड प्रॉम्प्ट के संकलन
  2. स्विच
  3. नया संस्करण पुराने संस्करण
  4. को दूर स्थापित
  5. शुरू सेवा

यह बहुत असुविधाजनक है। इसे करने का कोई बेहतर तरीका है?

उत्तर

5

मैं आम तौर पर कक्षा पुस्तकालय में सेवा कार्यान्वयन का बड़ा हिस्सा डालता हूं, और फिर इसे चलाने के लिए दो "फ्रंट-एंड" बना देता हूं - एक सेवा प्रोजेक्ट, दूसरा कंसोल या विंडोज़ फॉर्म एप्लिकेशन। मैं डीबगिंग के लिए कंसोल/फॉर्म एप्लिकेशन का उपयोग करता हूं।

हालांकि, आपको डीबग अनुभव के बीच पर्यावरण में अंतर और वास्तविक सेवा के रूप में चलने के दौरान अवगत होना चाहिए - उदा। आप गलती से एक इंटरैक्टिव उपयोगकर्ता के साथ सत्र में चलने पर निर्भर हो सकते हैं, या (Winforms के लिए) जहां एक संदेश पंप चल रहा है।

1

आप एक और कंसोल या WinForms एप्लिकेशन के रूप में विंडोज सेवा नहीं चला सकते हैं। इसे विंडोज़ द्वारा ही शुरू किया जाना चाहिए।

यदि आपके पास @Damien_The_Unbeliever के रूप में उपयोग करने के लिए तैयार बुनियादी ढांचा नहीं है (जो मैं भी अनुशंसा करता हूं) तो आप डीबग स्थान से सेवा इंस्टॉल कर सकते हैं। तो आप एक बार installutil का उपयोग करें और /bin/debug में स्थित निष्पादन योग्य को इंगित करें। फिर आप services.msc से एक सेवा शुरू करते हैं और Visual Studio > Debug > Attach to Process मेनू का उपयोग करते हैं और विंडोज सेवा से संलग्न होते हैं।

तुम भी OnStart कॉल में पहली पंक्ति, या Debugger.Break() रूप Thread.Sleep(10000) उपयोग करने से पहले सेवा किसी भी काम को निष्पादित करता है संलग्न करने के लिए सक्षम होने के लिए आप मदद करने के लिए विचार कर सकते हैं। रिलीज से पहले उन्हें हटाने के लिए मत भूलना।

0

आप Environment.UserInteractive चर का उपयोग कर सकते हैं। कार्यान्वयन का विवरण here

7

मेरी राय में सबसे अच्छा तरीका Debug निर्देश का उपयोग करना है। नीचे इसके लिए एक उदाहरण है।

#if(!DEBUG) 
    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
    { 
     // Calling MyService Constructor 
      new MyService() 
    }; 
    ServiceBase.Run(ServicesToRun); 
#else 
    MyService serviceCall = new MyService(); 
    serviceCall.YourMethodContainingLogic(); 
#endif 

मारो F5 और यह डिबग करने के लिए अपने YourMethodContainingLogic विधि पर एक Breakpoint निर्धारित किया है।

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