Мне нужно программно изменить пользователя для входа в службу 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?