كيف أقوم بتثبيت خدمة Windows التي تعمل كمسؤول؟
-
04-10-2019 - |
سؤال
لقد كتبت مثبتًا يقوم بتثبيت خدمة 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 موجه فقط تثبيت الخدمة في المقام الأول ، وعدم إخبارها بالتشغيل كمسؤول.