2010-07-12 2 views
5

से किसी दूरस्थ सेवा प्रारंभ मैं एक दूरस्थ पीसीसी #

public static List<Service> GetServices() 
    { 
     List<Service> Services = new List<Service>(); 
     ServiceController[] sc = ServiceController.GetServices(Server); 
     foreach (var s in sc) 
     { 
      Services.Add(new Service { Name = s.ServiceName, Running = s.Status == ServiceControllerStatus.Running }); 
     } 
     return Services; 
    } 

    public static bool StartService(string ServiceName) 
    { 
     try 
     { 
      ServiceController sc = new ServiceController(ServiceName, Server); 
      sc.Start(); 
      sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10)); 
      sc.Refresh(); 
      return sc.Status == ServiceControllerStatus.Running; 
     } 
     catch(Exception ex) { return false; } 
    } 

GetServices विधि ठीक काम करता है पर खिड़कियों सेवाओं को प्रारंभ करने के लिए एक सी # WinForms एप्लिकेशन में निम्न कोड का उपयोग कर रहा है जब अपने स्थानीय पीसी पर या पर इशारा करते हुए रिमोट पीसी स्टार्ट सेवा विधि हालांकि मेरे स्थानीय पीसी पर काम करती है, जब रिमोट पीसी पर चलती है तो मुझे पहुंच से वंचित कर दिया जाता है। इस मामले में रिमोट पीसी एक ही डोमेन पर एक विंडोज एक्सपी प्रो मशीन है और जिस उपयोगकर्ता के तहत मैं ऐप चला रहा हूं उसके पास स्थानीय व्यवस्थापक अधिकार हैं।

मुझे यकीन नहीं है कि यह मेरे कोड के साथ कोई समस्या है या यदि मेरी अनुमतियां सही नहीं हैं।

यदि यह अनुमति अनुमति है तो कृपया मुझे बताएं और मैं सर्वरफॉल्ट पर पूछने की कोशिश करूंगा।

धन्यवाद

+3

पहला त्वरित परीक्षण, सेवा प्रबंधक खोलें और दूरस्थ पीसी से कनेक्ट करें और आवश्यक सेवा शुरू करने का प्रयास करें। –

+0

क्या आप वाकई एक व्यवस्थापक के रूप में अपना आवेदन चला रहे हैं? क्या आपके पास सीएएस अनुमतियां हैं ('ServiceControllerPermission (ServiceControllerPermissionAccess.Control)' और 'SecurityPermission (PermissionState.Unrestricted)')? आपको पहले यह जांचना चाहिए कि 'sc.Status == ServiceControllerStatus.Stopped'। –

+0

ठीक है सेवा प्रबंधक भी विफल रहता है इसलिए मुझे लगता है कि यह मदद के लिए सर्वरफॉल्ट धन्यवाद के लिए एक प्रश्न है। – Gavin

उत्तर

0

यह पता चला कि यह एक अनुमति समस्या थी। मैं वर्चुअल मशीन के साथ परीक्षण कर रहा था और हमारे वीएम के पास हमारे डोमेन पर अलग-अलग एक्सेस अनुमतियां हैं।

+1

यह कुछ है @conrad Frix पहले ही उत्तर दिया गया है (जुल 12)। इस प्रश्न के उत्तर के रूप में अपने उत्तर को चिह्नित करने के बजाय, आपने अपने प्रश्न का उत्तर दिया और इसे उत्तर के रूप में चिह्नित किया। यह सही व्यवहार नहीं है। – Esen

4

यदि ऐसा पाया जाता, तो आप सिर्फ शुरू करने और इसके बजाय आप सेवा के DACL संशोधित कर सकते हैं करेंगे व्यवस्थापक अधिकार होने के खिड़की सेवाओं को रोकने की अनुमति चाहते हैं।

ऐसा करने के मूल रूप से दो तरीके हैं।

1) सुरक्षा वर्णनकर्ता परिभाषा भाषा (एसडीडीएल) स्ट्रिंग का निष्पादन।

2) NativeObjectSecurity से विरासत और ServiceInstaller_AfterInstall विधि के दौरान अपने DACL परिवर्तनों को लागू करें।