سؤال

أحاول بدء خدمة كمستخدم وتسير الأمور بشكل جيد، حتى أحاول تشغيل مستخدم ليس لديه كلمة مرور.ثم يفشل في البدء (بسبب خطأ في تسجيل الدخول).

هل أفعل شيئًا خاطئًا أم أن هذا "حسب التصميم"؟

رمز تسجيل هذه الخدمة:

    SC_HANDLE schService = CreateService( 
        schSCManager,           
        strNameNoSpaces,      
        strServiceName,           
        SERVICE_ALL_ACCESS,       
        SERVICE_WIN32_OWN_PROCESS, 
        SERVICE_AUTO_START,    
        SERVICE_ERROR_NORMAL,      
        szPath,                  
        NULL,                     
        NULL,                  
        NULL,                    
        strUser,
        (strPassword.IsEmpty())?NULL:strPassword);
هل كانت مفيدة؟

المحلول

قد يكون ذلك بسبب متطلبات أمان نظام التشغيل أو سياسة الأمان.تحقق من السياسات الأمنية لمعرفة ما إذا كان هناك أي شيء ذي صلة هناك.

نصائح أخرى

نعم، كان الأمر يتعلق بالفعل بالسياسة الأمنية.للتوضيح:

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

"إذا كنت تريد تعطيل القيود المفروضة على تسجيل الدخول إلى الشبكة بدون كلمة مرور، فيمكنك القيام بذلك من خلال سياسة الأمان المحلية.يمكن تعديل إعداد السياسة الذي يتحكم في تقييد كلمة المرور الفارغة باستخدام الأدوات الإضافية لسياسة الأمان المحلية أو سياسة المجموعة MMC.يمكنك استخدام أي من الأداتين للعثور على خيار السياسة هذا في إعدادات الأمان\السياسات المحلية\خيارات الأمان.اسم السياسة هو الحسابات: تقييد استخدام الحساب المحلي لكلمات المرور الفارغة لتسجيل الدخول إلى وحدة التحكم فقط.يتم تمكينه بشكل افتراضي."

وبعد تعطيل ذلك، كل شيء يعمل بشكل جيد.

تحتاج إلى تحديد سلسلة فارغة، وليس NULL إذا لم يكن هناك كلمة مرور.NULL ليست سلسلة فارغة صالحة، "" هي كذلك.ربما يجب عليك فقط المرور strPassword للمعلمة الأخيرة

SC_HANDLE schService = CreateService( 
            schSCManager,           
            strNameNoSpaces,      
            strServiceName,           
            SERVICE_ALL_ACCESS,       
            SERVICE_WIN32_OWN_PROCESS, 
            SERVICE_AUTO_START,    
            SERVICE_ERROR_NORMAL,      
            szPath,                  
            NULL,                     
            NULL,                  
            NULL,                    
            strUser,

// change this line to:
            strPassword.IsEmpty() ? L"" : strPassword);
// or maybe
            strPassword);

شكرًا لك - لقد حاولت ذلك أولاً بالفعل، ولكن دون جدوى.

إذا قمت بتشغيل ملفservice.msc، فانتقل يدويًا إلى خصائص الخدمة وامسح حقلي كلمة المرور، ثم اضغط على "تطبيق" وحاول تشغيله، فسيفشل أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top