Учетные данные при установке службы Windows
Я пытаюсь установить проект службы Windows С# с помощью проекта развертывания VisualStudio.Net.
Чтобы запустить проект развертывания, щелкните правой кнопкой мыши и выберите "установить" из контекстного меню, мастер установки запустится и в конце концов предложит мне диалоговое окно "Установить службу входа", в котором запрашивается имя пользователя и пароль.
Когда я устанавливаю службу с помощью утилиты sc из командной строки, мне не нужно предоставлять учетные данные.
Нужно ли мне создавать логин только для этой службы? Я бы предпочел использовать "Local System" или "Network Service" (не уверен, какая разница), как это делают другие службы.
Ответы
Ответ 1
Добавьте этот код в свой частный void InitializeComponent()
метод в projectInstaller.Designer.cs
файле в проект службы Windows.
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
если определение вашего процесса установки:
private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
Ответ 2
Отметьте эту ссылку: http://msdn.microsoft.com/en-us/library/zt39148a (v = vs .110).aspx
Обратите внимание на этот раздел: Чтобы создать установщиков для вашей службы
Внесите изменения в свой ServiceProcessInstaller:
В конструкторе щелкните ServiceProcessInstaller1 для проекта Visual Basic или serviceProcessInstaller1 для проекта Visual С#. Задайте свойство Account для LocalSystem. Это приведет к тому, что служба будет установлена и запущена в локальной учетной записи службы.
Ответ 3
В проекте, который содержит службу, добавьте класс 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");
}
}
}
Затем в проводнике решений щелкните правой кнопкой мыши проект развертывания и выберите "Вид > Пользовательские действия". Щелкните правой кнопкой мыши пользовательские действия и выберите "Добавить пользовательское действие...". Выберите папку приложения и выберите основной вывод проекта, который содержит эту службу. Теперь после установки будут выполнены пользовательские действия (Commit
сверху). Вы можете добавить дополнительные методы (Install
, Rollback
, Uninstall
), если вам нужны другие пользовательские действия.
Ответ 4
- Откройте ProjectInstaller
- Щелкните правой кнопкой мыши ProcessInstaller и выберите свойства
- В раскрывающемся списке "Аккаунт" в разделе "Разное" выберите учетную запись, для которой ваша служба будет работать как
Подробнее о различных учетных записях и их привилегиях см. следующую ссылку:
http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx