استخدام InstallUtil وتعيين اسم المستخدم/كلمة المرور لتسجيل الدخول إلى خدمة Windows بصمت

StackOverflow https://stackoverflow.com/questions/140054

سؤال

أحتاج إلى استخدام InstallUtil لتثبيت خدمة Windows C#.أحتاج إلى تعيين بيانات اعتماد تسجيل دخول الخدمة (اسم المستخدم وكلمة المرور).كل هذا يجب أن يتم بصمت.

هل هناك طريقة للقيام بشيء مثل هذا:

installutil.exe myservice.exe /customarg1=username /customarg2=password
هل كانت مفيدة؟

المحلول 2

برافو لزميلي في العمل (بروس إيدي).لقد وجد طريقة يمكننا من خلالها إجراء مكالمة سطر الأوامر هذه:

installutil.exe /user=uname /password=pw myservice.exe

يتم ذلك عن طريق تجاوز OnBeforeInstall في فئة المثبت:

namespace Test
{
    [RunInstaller(true)]
    public class TestInstaller : Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller serviceProcessInstaller;

        public OregonDatabaseWinServiceInstaller()
        {
            serviceInstaller = new ServiceInstaller();
            serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
            serviceInstaller.ServiceName = "Test";
            serviceInstaller.DisplayName = "Test Service";
            serviceInstaller.Description = "Test";
            serviceInstaller.StartType = ServiceStartMode.Automatic;
            Installers.Add(serviceInstaller);

            serviceProcessInstaller = new ServiceProcessInstaller();
            serviceProcessInstaller.Account = ServiceAccount.User; 
            Installers.Add(serviceProcessInstaller);
        }

        public string GetContextParameter(string key)
        {
            string sValue = "";
            try
            {
                sValue = this.Context.Parameters[key].ToString();
            }
            catch
            {
                sValue = "";
            }
            return sValue;
        }


        // Override the 'OnBeforeInstall' method.
        protected override void OnBeforeInstall(IDictionary savedState)
        {
            base.OnBeforeInstall(savedState);

            string username = GetContextParameter("user").Trim();
            string password = GetContextParameter("password").Trim();

            if (username != "")
                serviceProcessInstaller.Username = username;
            if (password != "")
                serviceProcessInstaller.Password = password;
        }
    }
}

نصائح أخرى

الطريقة الأسهل بكثير من المنشورات أعلاه وبدون أي كود إضافي في برنامج التثبيت الخاص بك هي استخدام ما يلي:

installUtil.exe /اسم المستخدم=المجال\اسم المستخدم /كلمة المرور=كلمة المرور /C:\My.exe غير المراقب

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

InstallUtil.exe يحدد StartupType=Manual

في حالة رغبتك في تشغيل الخدمة تلقائيًا، استخدم:

sc config MyServiceName start= auto

(لاحظ أنه يجب أن يكون هناك مسافة بعد '=')

لا، installutil لا يدعم ذلك.

بالطبع إذا كتبت مثبتًا؛مع عمل مخصص فستكون قادرًا على استخدام ذلك كجزء من MSI أو عبر installutil.

يمكنك أيضًا فرض تشغيل الخدمة كمستخدمServiceProcessInstaller::Account = ServiceAccount.User;

ستظهر نافذة منبثقة تطلب "[المجال\]المستخدم، كلمة المرور" أثناء تثبيت الخدمة.

public class MyServiceInstaller : Installer
{
    /// Public Constructor for WindowsServiceInstaller
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        ServiceInstaller serviceInstaller = new ServiceInstaller();

        //# Service Account Information
        serviceProcessInstaller.Account = ServiceAccount.User; // and not LocalSystem;
     ....
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top