سؤال

لقد كتبت مثبتًا يقوم بتثبيت خدمة Windows (أ) التي تحتاج إلى بدء/إيقاف خدمة أخرى (ب). ومع ذلك ، عندما تحاول البدء/التوقف B ، أحصل على هذا الاستثناء:

System.InvalidoperationException: لا يمكن فتح خدمة myservice على الكمبيوتر ".". ---> System.componentModel.win32Exception: تم رفض الوصول

يقوم التثبيت بتثبيت الخدمة كخدمة محلية ، ويطلب حقوق المسؤول عبر UAC المنبثق ، والتي منحها. لقد أضفت أيضًا ملف App.Manifest إلى الخدمة التي يتم تعيينها لطلب حقوق المسؤول:

ومع ذلك ما زلت أحصل على هذا الخطأ.

هذه هي الطريقة التي أبدأ بها الخدمة (التوقف هو نفسه ، إلا أنه يتوقف ، بالطبع):

using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
    mutex.WaitOne();

    if (ServiceExists(serviceName) == true)
    {
        using (ServiceController serviceController = new ServiceController(serviceName, "."))
        {
            serviceController.Start(); // this line throws the exception
        }
    }

    mutex.ReleaseMutex();
}

لماذا يمكن رفض الوصول إلى هذه الخدمة؟

هل كانت مفيدة؟

المحلول

لا يمكن للخدمة طلب ارتفاع UAC. يبدو لي أن موجه UAC الذي تصفه يطلبه المثبت بالفعل ، وليس الخدمة. يتم تشغيل الخدمات عادةً بحساب مميز للغاية بالفعل ، LocalSystem بشكل افتراضي. تأكد من تكوين الخدمة لاستخدام مثل هذا الحساب المميز ، وليس حساب مستخدم مقيد.

نصائح أخرى

كاختبار سريع ، إذا فتحت services.msc وتحقق من الخادم الخاص بك إلى "تشغيل" وأدخل بيانات الاعتماد الخاصة بك ، هل يختفي الخطأ؟ قد لا يكون لدى FacalService الوصول إلى إيقاف الخدمات الأخرى. من المحتمل أن يتيح لك توفير إذن UAC موجه فقط تثبيت الخدمة في المقام الأول ، وعدم إخبارها بالتشغيل كمسؤول.

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