Necesito cambiar el usuario de inicio de sesión de un servicio de Windows mediante programación. Y estoy usando el siguiente código para hacer esto:Cambiar el usuario del servicio de Windows mediante programación
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
}
Este código funciona en el 90% de las situaciones, pero en algunas situaciones el servicio no se puede iniciar debido a la Falta de la conexión. Generalmente, no hay error en InvokeMetod pero cuando tratamos de iniciar el servicio obtenemos el siguiente error:
System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.
La solución solución es sencilla, sólo tenemos que introducir las mismas credenciales a través de la interfaz de Windows y el problema está resuelto.
Así que mi pregunta es, ¿alguien ha experimentado el problema similar con ManagementObject porque parece que en alguna situación no se relaciona nombre de usuario y contraseña para el servicio de Windows?
Me pregunto si es debido a su instrucción using. Lo que quiero decir es que ManagementObject se destruye antes de que se pueda completar? No estoy demasiado familiarizado con WMI, así que no estoy seguro. – HVS
Como el nombre de usuario y la contraseña han sido ingresados por el usuario, buscaría también allí los problemas. Asegúrate de que sean nombres válidos. "DOMINIO \ nombre de usuario" es bueno en cualquier sistema, pero 'nombre de usuario @ DOMINIO' no funciona en Windows 2000 y versiones anteriores. – HVS
Tenemos el mismo problema y estoy bastante seguro de que el servicio se instaló con un programa de instalación de C#, .net 1.1. Comienzo el servicio desde la línea de comando ('net start') y obtengo un error de inicio de sesión. Extrañamente, esto sucede con 2 de los 7 servicios que están instalados en la máquina (probablemente usando el mismo código de instalación). Aún no llegué a diagnosticarlo, pero la máquina es el servidor de Windows 2003 con los últimos service packs. Los servicios son código c .net 2.0. Escribir la contraseña la arregla manualmente hasta que se reinicia. – LegendLength