Изменить пользователя службы Windows программно - PullRequest
9 голосов
/ 07 июня 2009

Мне нужно программно изменить пользователя для входа в службу Windows. И я использую следующий код для этого:

string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName);
using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
{
object[] wmiParams = new object[11];

if (PredefinedAccount)
    {
        wmiParams[6] = "LocalSystem";
            wmiParams[7] = "";
    }
    else
    {
        wmiParams[6] = ServiceUsername; // provided by user
            wmiParams[7] = ServicePassword; // provided by user
    }

    object invokeResult = service.InvokeMethod("Change", wmiParams);

// handle invokeResult - no error up to this point
}

Этот код работает в 90% случаев, но в некоторых случаях служба не может быть запущена из-за ошибки входа в систему. Обычно в InvokeMetod нет ошибок, но когда мы пытаемся запустить службу, мы получаем следующую ошибку:

System.InvalidOperationException: не удается запустить службу X на компьютере ''. -> System.ComponentModel.Win32Exception: служба не запуск из-за ошибки входа в систему.

Обходное решение простое, нам просто нужно ввести те же учетные данные через интерфейс Windows, и проблема решена.

Итак, мой вопрос: сталкивался ли кто-нибудь с подобной проблемой с ManagementObject, потому что кажется, что в некоторых ситуациях он не связывает имя пользователя и пароль со службой Windows?

Ответы [ 2 ]

9 голосов
/ 26 июня 2009

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

Пожалуйста, просмотрите эту статью:

Как программно управлять пользовательскими привилегиями в Windows NT

0 голосов
/ 07 июня 2009

Вы замечаете какие-либо закономерности среди этих неудач? Та же машина? Та же ОС? Тот же пользователь? Имеет ли пользователь права « вход в систему как сервис » или «интерактивный вход»? Лично я не знаком с этим методом указания пользователя для службы. Я бы подумал, что вам придется перезапустить службу, но я думаю, нет, если она будет работать 90% времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...