c#
  • .net
  • windows-services
  • 2009-06-07 14 views 9 likes 
    9

    मुझे प्रोग्रामिंग के लिए विंडोज सेवा के लिए लॉगऑन उपयोगकर्ता को बदलने की जरूरत है। और मैं निम्नलिखित कोड का उपयोग कर रहा है कि क्या करने के लिए:विंडोज सेवा उपयोगकर्ता को प्रोग्रामेटिक रूप से बदलें

    string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName); 
    using (ManagementObject service = new ManagementObject(new ManagementPath(objPath))) 
    { 
    object[] wmiParams = new object[11]; 
    
    if (PredefinedAccount) 
        { 
         wmiParams[6] = "LocalSystem"; 
          wmiParams[7] = ""; 
        } 
        else 
        { 
         wmiParams[6] = ServiceUsername; // provided by user 
          wmiParams[7] = ServicePassword; // provided by user 
        } 
    
        object invokeResult = service.InvokeMethod("Change", wmiParams); 
    
    // handle invokeResult - no error up to this point 
    } 
    

    इस कोड स्थितियों के 90% में काम करता है, लेकिन कुछ स्थितियों में विफलता लॉगऑन की वजह से शुरू नहीं किया जा सकता। आम तौर पर InvokeMetod पर कोई त्रुटि है, लेकिन जब हम सेवा हम निम्न त्रुटि प्राप्त प्रारंभ करने का प्रयास:

    System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.

    वैकल्पिक हल समाधान सरल है, हम बस हल किया जाता है विंडोज इंटरफेस और समस्या के माध्यम से एक ही क्रेडेंशियल दर्ज करने की जरूरत है।

    तो मेरा सवाल यह है कि, क्या किसी ने प्रबंधनऑब्जेक्ट के साथ ऐसी ही समस्या का अनुभव किया है क्योंकि ऐसा लगता है कि कुछ स्थितियों में यह विंडोज सेवा के लिए उपयोगकर्ता नाम और पासवर्ड से संबंधित नहीं है?

    +1

    मुझे आश्चर्य है कि अगर यह होता है अपने कथन का उपयोग की वजह से। मेरा मतलब यह है कि प्रबंधन ऑब्जेक्ट को पूरा करने की अनुमति देने से पहले नष्ट हो रहा है? मैं डब्लूएमआई से ज्यादा परिचित नहीं हूं, इसलिए मुझे यकीन नहीं है। – HVS

    +0

    चूंकि उपयोगकर्ता नाम और पासवर्ड उपयोगकर्ता दर्ज किया गया है, इसलिए मैं समस्याओं के लिए भी वहां देखता हूं। सुनिश्चित करें कि वे वैध नाम हैं। "DOMAIN \ username" किसी भी सिस्टम में अच्छा है, लेकिन 'उपयोगकर्ता नाम @ DOMAIN' विंडोज 2000 और इससे पहले काम नहीं करता है। – HVS

    +0

    हमें एक ही समस्या है और मुझे पूरा यकीन है कि सेवा सी #, .NET 1.1 स्थापना प्रोग्राम के साथ स्थापित की गई थी। मैं कमांड लाइन ('नेट स्टार्ट') से सेवा शुरू करता हूं और लॉगऑन विफलता प्राप्त करता हूं। आश्चर्यजनक रूप से यह मशीन पर स्थापित 7 में से 2 सेवाओं के साथ होता है (संभवतः एक ही स्थापना कोड का उपयोग कर)। मुझे अभी तक इसका निदान करने के लिए चारों ओर नहीं मिला है लेकिन मशीन नवीनतम सर्विस पैक के साथ विंडोज 2003 सर्वर है। सेवाएं सी # नेट 2.0 कोड हैं। पासवर्ड टाइप करना मैन्युअल रूप से रीबूट होने तक इसे ठीक करता है। – LegendLength

    उत्तर

    0

    क्या आप उन असफलताओं के बीच कोई पैटर्न देखते हैं? वही मशीन? वही ओएस? वही उपयोगकर्ता? क्या उपयोगकर्ता के पास "logon as service" या "लॉगऑन इंटरैक्टिव" अधिकार हैं? निजी तौर पर, मैं सेवा के लिए उपयोगकर्ता को निर्दिष्ट करने के इस तरीके से परिचित नहीं हूं। मैंने सोचा होगा कि आपको सेवा को पुनरारंभ करना होगा, लेकिन मुझे लगता है कि यह 90% समय काम नहीं करता है।

    +0

    वैसे यह विभिन्न ओएस-एस पर निर्भर करता है। कोई पैटर्न नहीं है। कभी-कभी ऐसा होता है यदि पासवर्ड छोटा होता है (7 वर्णों से कम)। इन सभी मामलों में समस्या हल हो गई जब उपयोगकर्ता ने Windows डिफ़ॉल्ट इंटरफ़ेस के माध्यम से एक ही उपयोगकर्ता नाम और पासवर्ड दर्ज किया। इसलिए हम मानते हैं कि यह हमारे कोड या प्रबंधन ऑब्जेक्ट में कुछ है जिसका हम उपयोग कर रहे हैं। – Anne

    9

    मुझे यकीन नहीं है कि यह समस्या हल हो गई है या नहीं। लेकिन हमें अभी भी इसी तरह की समस्या का सामना करना पड़ा और हमने पाया कि ऐसा इसलिए है क्योंकि खाते में "सेवा के रूप में लॉग ऑन" विशेषाधिकार नहीं है। खाते में ऐसे विशेषाधिकार जोड़ने के लिए आपको LsaAddAccountRights का उपयोग करने की आवश्यकता है।

    देखें इस लेख कृपया:

    How To Manage User Privileges Programmatically in Windows NT

    +0

    शानदार !!! यह मेरा मुद्दा था, इसे पोस्ट करने के लिए धन्यवाद। – lidermin

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