سؤال

أحاول تثبيت خدمة .NET التي كتبتها.كما أوصت MSDN، أنا أستخدم InstallUtil.لكنني فاتني كيف يمكنني تعيين مستخدم الخدمة الافتراضي في سطر الأوامر أو حتى في الخدمة نفسها.الآن، عند تشغيل InstallUtil، سيعرض مربع حوار يطلب من المستخدم بيانات الاعتماد الخاصة بالمستخدم.أحاول دمج تثبيت الخدمة في تثبيت أكبر وأحتاج إلى أن يظل تثبيت الخدمة صامتًا.

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

المحلول

أعتقد أنني ربما وجدت ذلك.في الخدمة نفسها، يحتوي مكون ServiceProcessInstaller الذي تم إنشاؤه تلقائيًا على خاصية "الحساب" والتي يمكن تعيينها على "LocalService" أو "LocalSystem" أو "NetworkService" أو "User".لقد كان الإعداد الافتراضي هو "المستخدم" والذي يجب أن يعرض المطالبة.

نصائح أخرى

وكما لاحظت يا كريم، خاصية "الحساب" هي الحل هنا.بالنسبة للمهتمين بالاختلافات بين سياقات الأمان التي تحددها هذه الخاصية:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

أعلاه باستخدام InstallUtil أو SC، تعجبني فكرة إنشاء ملف المثبت الذاتي:

http://www.codeproject.com/KB/dotnet/WinSvcSelfInstaller.aspx

على الرغم من أنني وجدت هذا في وثائق .Net 1.1:

ال ManagedInstallerClass يدعم النوع البنية التحتية .NET Framework ولا يُقصد استخدامه مباشرة من الكود الخاص بك.

ضع في اعتبارك أيضًا فائدة SC.exe والذي لا يتطلب تثبيت الاستوديو المرئي.يمكنك ببساطة نسخ هذا الملف إلى الخادم الذي تريد إنشاء الخدمة فيه أو حتى تشغيله عن بعد.استخدم ال obj المعلمة لتحديد المستخدم.

يبدو أن هناك واجهة مستخدم رسومية لهذه الأداة، لكنني لم أستخدمها.

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

أعتقد أن سطح التصميم الخاص بالخدمة يحتوي على رابط لإنشاء مثبت المشروع.في هذا المصمم، يمكنك إضافة مثبت عملية من النوع System.ServiceProcess.ServiceProcessInstaller.تسمح لك خصائص هذا الكائن بتعيين الحساب لاستخدامه في الخدمة.

يحتوي InstallUtil على مفاتيح تبديل لسطر الأوامر يمكنها تجنب المطالبات عند استخدام "المستخدم" كنوع الحساب. /username و /password يتم استخدامها تكوين الحساب في وقت التثبيت.

الاستخدام:

installutil.exe /username=user /password=password yourservice.exe

ما قد تريده هو أن يكون لديك ملف تكوين حيث يمكن للمثبت قراءة الخدمة وتثبيتها.

للقيام بذلك، قم بإضافة مثبت خدمة إلى مشروعك، ثم قم بتحميل طريقة التثبيت بشكل زائد.في هذه الطريقة، قم بتعيين اسم المستخدم وكلمة المرور:

public override void Install(IDictionary stateSaver)
{
    serviceProcessInstaller1.Username="<username>";
    serviceProcessInstaller1.Password="<password>";
    base.Install(stateSaver);
}

إذا حاولت تعيين اسم المستخدم وكلمة المرور في المنشئ، فسيتم الكتابة فوق هذه القيم، لذا تأكد من تجاوز "التثبيت" للقيام بذلك.

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