2011-06-09 15 views
15

मैं इस कोड के साथ एक स्थानीय मशीन पर एक विंडोज सेवा को रोकने की कोशिश कर रहा हूं (सेवा Topshelf.Host है, अगर यह मायने रखती है):सेवा नियंत्रक सेवा रोकने में असमर्थ प्रतीत होता है

serviceController.Stop(); 
serviceController.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 

timeout 1 घंटे पर सेट है, लेकिन सेवा वास्तव में कभी नहीं रुक जाती है। इसके साथ अजीब चीज यह है कि सेवा एमएमसी स्नैप-इन के भीतर से मैं इसे पहले "रोक" स्थिति में देखता हूं, लेकिन कुछ समय बाद यह "प्रारंभ" पर वापस आ जाता है। हालांकि, जब मैं इसे मैन्युअल रूप से रोकने की कोशिश करता हूं, तो एक त्रुटि होती है:

Windows could not stop the Topshelf.Host service on Local Computer. 
Error 1061: The service cannot accept control messages at this time. 

क्या मुझे यहां कुछ याद आ रही है?

उत्तर

1

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

http://technet.microsoft.com/en-us/library/cc962384.aspx

0

जबकि एक नए एकल विभाजन बॉक्स के एक पुराने बहु विभाजन बॉक्स के कोड का स्थान बदलना मैं सिर्फ इस समस्या से युद्ध किया। सेवा स्टॉप पर मैं डी को लिख रहा था: और चूंकि यह अस्तित्व में नहीं था, इसलिए मुझे 1061 त्रुटि मिली। ऑनस्टॉप के दौरान कोई भी लंबा ऑपरेशन इस कारण होगा जब तक कि आप कॉलबैक प्रतिनिधि के साथ किसी अन्य थ्रेड पर कॉल को स्पिन नहीं करते।

10

या तो आपकी सेवा कुछ बड़े ऑपरेशन को संसाधित करने में व्यस्त है या राज्य को बदलने के लिए संक्रमण में है। इसलिए अब और इनपुट स्वीकार करने में सक्षम नहीं है ... बस इसके बारे में सोचें क्योंकि यह अधिक से अधिक ले रहा है ...

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

1

मुझे इसी तरह के मुद्दे का सामना करना पड़ा। यह त्रुटि कभी-कभी होती है क्योंकि सेवा अब नियंत्रण संदेशों को स्वीकार नहीं कर सकती है, यह सर्वर में डिस्क स्पेस समस्याओं के कारण हो सकती है जहां उस विशेष सेवाओं की लॉग फ़ाइल मौजूद है। यदि ऐसा होता है, तो आप नीचे दिए गए विकल्प पर भी विचार कर सकते हैं। 1. उस स्थान पर जाएं जहां सेवा & है, यह लॉग फ़ाइल स्थित है। 2. कुछ जगह मुक्त करें 3. कार्य प्रबंधक के माध्यम से सेवाओं की प्रक्रिया को कॉल करें 4. सेवा शुरू करें।

17

मुझे पता है कि मुझे इसका जवाब देने में काफी देर हो चुकी है, लेकिन मुझे एक समान समस्या का सामना करना पड़ा, यानी त्रुटि: "सेवा इस समय नियंत्रण संदेशों को स्वीकार नहीं कर सकती है।" और इसे दूसरों के लिए संदर्भ के रूप में जोड़ना चाहते हैं। Topshelf साथ सेवा की मेजबानी की

#Get the PID of the required service with the help of the service name, say, service name. 
$ServicePID = (get-wmiobject win32_service | where { $_.name -eq 'service name'}).processID 

#Now with this PID, you can kill the service 
taskkill /f /pid $ServicePID 
+0

धन्यवाद आप इस – user584018

+0

मैं कार्य प्रबंधक व्यवस्थापक के रूप में उपयोग करते हुए सेवा को नहीं मार सकता है, और रिबूट या तो मदद नहीं की है। यह वह तरीका था जो मेरे लिए काम करता था। – ChrisG

+0

मेरे लिए काम किया। व्यवस्थापक के रूप में पावरहेल चलाने के लिए भी मत भूलना। – Aaron

1

मैं ठीक उसी समस्या थी:

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

उचित प्रारंभ पीछा कर रहा है:

namespace Example.My.Service 
{ 
    using System; 
    using System.Threading.Tasks; 

    using Topshelf; 

    internal class Program 
    { 
     public static void Main() 
     { 
      HostFactory.Run(
       x => 
       { 
        x.Service<MyService>(
         s => 
         { 
          MyService testServerService = null; 
          s.ConstructUsing(name => testServerService = new MyService()); 
          s.WhenStarted(service => service.Start()); 
          s.WhenStopped(service => service.Stop()); 
          s.AfterStartingService(
           context => 
           { 
            if (testServerService == null) 
            { 
             throw new InvalidOperationException("Service not created yet."); 
            } 
            testServerService.AfterStart(context); 
           }); 
         }); 
        x.SetServiceName("my_service"); 
       }); 
     } 
    } 

    public sealed class MyService 
    { 
     private Task starting; 

     public void Start() 
     { 
      this.starting = Task.Run(() => InitializeService()); 
     } 

     private void InitializeService() 
     { 
      // TODO: Provide service initialization code. 
     } 

     [CLSCompliant(false)] 
     public void AfterStart(HostControl hostStartedContext) 
     { 
      if (hostStartedContext == null) 
      { 
       throw new ArgumentNullException(nameof(hostStartedContext)); 
      } 
      if (this.starting == null) 
      { 
       throw new InvalidOperationException("Service start was not initiated."); 
      } 
      while (!this.starting.Wait(TimeSpan.FromSeconds(7))) 
      { 
       hostStartedContext.RequestAdditionalTime(TimeSpan.FromSeconds(10)); 
      } 
     } 

     public void Stop() 
     { 
      // TODO: Provide service shutdown code. 
     } 
    } 
} 
संबंधित मुद्दे