Aquí está mi pila de seguridad/.NET de Windows:Cómo iniciar/detener un servicio de Windows desde una aplicación ASP.NET - Problemas de seguridad
- Un servicio de Windows que se ejecuta como LocalSystem en una máquina Windows Server 2003.
- Un .NET 3.5 Sitio web que se ejecuta en la misma caja, bajo el servidor de producción "por defecto" IIS configuración (lo que probablemente como usuario NETWORKSERVICE?)
En mi entorno por defecto VS2008 DEV tengo éste método, que se llamada desde la aplicación ASP.NET, que funciona bien:
private static void StopStartReminderService() {
ServiceController svcController = new ServiceController("eTimeSheetReminderService");
if (svcController != null) {
try {
svcController.Stop();
svcController.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
svcController.Start();
} catch (Exception ex) {
General.ErrorHandling.LogError(ex);
}
}
}
Cuando ejecuto esto en el servidor de producción, me sale el siguiente error de la ServiceController:
Sourc e: System.ServiceProcess -> System.ServiceProcess.ServiceController -> IntPtr GetServiceHandle (Int32) -> System.InvalidOperationException Mensaje: No se puede abrir el servicio eTimeSheetReminderService en la computadora '.'.
¿Por qué ocurre esto y cómo lo soluciono?
EDIT:
La respuesta está abajo, sobre todo en los comentarios, pero para aclarar:
- El tema fue relacionada con la seguridad, y se produjo porque la cuenta NETWORKSERVICE no tiene derechos suficientes para Iniciar/Detener un servicio
- Creé una cuenta de usuario local y la agregué al grupo de PowerUsers (este grupo tiene casi derechos de administrador)
- No quiero toda mi aplicación web para suplantar a ese usuario todo el tiempo, por lo que me hago pasar por el método en el que manipulo el servicio. Hago esto mediante el uso de los siguientes recursos para ayudarme a hacerlo en código:
MS KB article y this, just to get a better understanding
NOTA: No suplantar a través del web.config, lo hago en el código. Ver el artículo de MS KB arriba.
¿Qué tipo de excepción era? A 'System.InvalidOperationException'? – Phaedrus
@Phaedrus: hey, sí, sí lo era. He puesto más información de error en mi edición. vítores – andy