Использование InstallUtil и автоматическая установка имени пользователя и пароля для входа в службу Windows

Мне нужно использовать InstallUtil для установки службы Windows C#. Мне нужно установить учетные данные для входа в службу (имя пользователя и пароль). Все это нужно делать молча.

Есть ли способ сделать что-то подобное:

installutil.exe myservice.exe /customarg1=username /customarg2=password
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
51
0
75 748
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Нет, installutil не поддерживает это.

Конечно, если вы написали установщик; с настраиваемое действие вы сможете использовать его как часть MSI или через installutil.

Ответ принят как подходящий

Браво моему коллеге (Брюсу Эдди). Он нашел способ сделать этот вызов из командной строки:

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;
        }
    }
}

Для всех, кто использует это, убедитесь, что все аргументы службы в командной строке предшествуют ".exe", в противном случае они не обрабатываются / не передаются.

Ray Hayes 28.06.2012 14:18

Это будет включать имя пользователя / пароль в файл журнала установки. Если вы не отключите запись файлов журнала, эта информация останется, что, на мой взгляд, довольно опасно. Лучшего решения пока не нашел :(

flayn 14.09.2012 12:43

Это работает даже с ManagedInstallerClass ManagedInstallerClass.InstallHelper (новая строка [] {"/ user = theUserName", "/ password = ******", Assembly.GetExecutingAssembly (). Location});

AUSTX_RJL 06.08.2014 00:42

Вы также можете заставить свою службу запускаться от имени пользователя, используя 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;
     ....

-1 вопрос явно просит тихую установку

krystan honour 12.03.2014 15:21

Намного более простой способ, чем в сообщениях выше, и без дополнительного кода в вашем установщике, - это использовать следующее:

installUtil.exe /username=domain\username /password=password /unattended C:\My.exe

Просто убедитесь, что используемая вами учетная запись действительна. В противном случае вы получите исключение «Нет сопоставления между именами учетных записей и идентификаторами безопасности».

Это работает, только если вы установите для свойства Account в ServiceProcessInstaller значение ServiceAccount.User.

headsling 17.06.2010 20:14

Кроме того, чтобы указать локальную машину, используйте ".", Например: "/username=.\Administrator"

DenNukem 01.05.2012 04:58

Обратите внимание, что использование известного переключателя password, показанного здесь, маскирует пароль в файле журнала установки.

paulroho 25.02.2020 17:52

InstallUtil.exe устанавливает StartupType = Manual

Если вы хотите запустить службу автоматически, используйте:

sc config MyServiceName start= auto

(обратите внимание, что после '=' должен быть пробел)

В моем случае sc config MyServiceName start = auto не работает

nikolai.serdiuk 30.06.2016 12:26

Другие вопросы по теме