Учетные данные при установке службы Windows - PullRequest
51 голосов
/ 12 февраля 2010

Я пытаюсь установить проект службы Windows C # с помощью проекта развертывания VisualStudio.Net.

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

Когда я устанавливаю службу с помощью утилиты sc из командной строки, мне не нужно предоставлять учетные данные.

Нужно ли создавать логин только для этого сервиса? Я бы предпочел использовать «Локальная система» или «Сетевая служба» (не уверен, в чем разница), как другие службы.

Ответы [ 4 ]

98 голосов
/ 12 февраля 2010

Добавьте этот код в ваш личный метод void InitializeComponent() в файле projectInstaller.Designer.cs в вашем проекте службы Windows.

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

если определение вашего установщика процесса:

private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
20 голосов
/ 21 мая 2014

Проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

Обратите внимание на этот раздел: Для создания установщиков для вашего сервиса

Внесите изменения в ваш ServiceProcessInstaller:

В конструкторе щелкните ServiceProcessInstaller1 для проекта Visual Basic или serviceProcessInstaller1 для проекта Visual C #. Установите для свойства Account значение LocalSystem. Это приведет к тому, что служба будет установлена ​​и запущена с локальной учетной записью службы.

4 голосов
/ 12 февраля 2010

В проекте, который содержит службу, добавьте класс Installer. Сделайте так, чтобы это выглядело примерно так:

[RunInstaller(true)]
public class MyServiceInstaller : Installer
{
    public MyServiceInstaller()
    {
        ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
        serviceProcessInstaller.Account = ServiceAccount.LocalSystem; // Or whatever account you want

        var serviceInstaller = new ServiceInstaller
        {
            DisplayName = "Insert the display name here",
            StartType = ServiceStartMode.Automatic, // Or whatever startup type you want
            Description = "Insert a description for your service here",
            ServiceName = "Insert the service name here"
        };

        Installers.Add(_serviceProcessInstaller);
        Installers.Add(serviceInstaller);
    }

    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        // This will automatically start your service upon completion of the installation.
        try
        {
            var serviceController = new ServiceController("Insert the service name here");
            serviceController.Start();
        }
        catch
        {
            MessageBox.Show(
                "Insert a message stating that the service couldn't be started, and that the user will have to do it manually");
        }
    }
}

Затем в обозревателе решений щелкните правой кнопкой мыши проект развертывания и выберите «Вид»> «Пользовательские действия». Щелкните правой кнопкой мыши на Custom Actions и выберите «Add Custom Action ...». Выберите папку приложения и выберите основной вывод проекта, который содержит сервис. Теперь пользовательские действия (Commit сверху) будут выполняться после установки. Вы можете добавить дополнительные методы (Install, Rollback, Uninstall), если вам нужны другие пользовательские действия.

2 голосов
/ 18 декабря 2012
  1. Откройте ваш ProjectInstaller
  2. Щелкните правой кнопкой мыши ProcessInstaller и выберите свойства
  3. В раскрывающемся списке «Учетная запись» в разделе «Разное» выберите учетную запись, для которой ваша служба должна работать как

Подробную информацию о различных учетных записях и их привилегиях см. По следующей ссылке:

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

...