2009-01-30 5 views
14

Tengo algunos servicios de Windows escritos en C#. Cuando alguien detiene o inicia el servicio, me gustaría poder determinar quién era y registrar esa información.¿Es posible registrar quién inició o detuvo un servicio de Windows?

Intenté registrar Environment.UserName pero eso evalúa a SYSTEM incluso en mi máquina local.

Además, por el momento estos servicios se están ejecutando en el servidor de Windows 2000.

Respuesta

12

En el Visor de eventos (Panel de control | Herramientas administrativas | Visor de eventos) en la pestaña Sistema, el Administrador de control de servicios registra quién inició y detuvo cada evento. Acabo de probar esto yo mismo y he visto los resultados. Esto me lleva a dos cosas:

  1. Es posible que pueda consultar o enganchar esos eventos desde el control de servicios a medida que ocurren, o
  2. Puede definitivamente sólo consulta "sistema" del Visor de sucesos de registro para buscar para esos eventos para su Servicio.

Espero que lo lleve a su solución.

+0

Sí! Eso es lo que estaba buscando. Solo necesito una forma de averiguar quién detuvo el servicio y ahí está - en el registro de eventos del sistema. ¡Gracias! – HitLikeAHammer

+9

'Dentro del Visor de eventos (Panel de control | Herramientas administrativas | Visor de eventos) en el sistema tab los registros del administrador de control de servicio que iniciaron y detuvieron cada evento. "No veo nada por el estilo. Todo lo que veo es un mensaje como' El servicio de la estación de trabajo ingresó al estado en ejecución. Pero nada sobre qué proceso/servicio provocó que comenzara. incluso en los detalles. Lo más parecido a una causa es el campo * Fuente * que además de la Actualización de Windows, es casi siempre el Controlador de Servicio (bueno, duh) que no dice nada sobre quién/qué le pidió al SC que ejecute el servicio. – Synetech

+1

Es cierto, acabo de confirmar que mi respuesta de hace más de cuatro años ya no funciona de la misma manera.Parece que el Administrador de control de servicios ya no registra sus propios eventos de Inicio y Detención, o al menos no está en el mismo lugar. (Acabo de volver a probar esto en Windows 8. Pude haber estado en Windows XP cuando escribí esa otra respuesta, pero no estoy seguro). – JMD

0

Probablemente no haya una manera. Cualquiera de las formas normales de .NET que obtenga en el usuario del entorno devolverá al usuario cuyas credenciales ejecuta el servicio (que normalmente será SISTEMA, SERVICIO LOCAL, SERVICIO DE RED, etc.).

Cómo probablemente lo haga es sondear el sistema para ver si un usuario está conectado, y asumir que el usuario lo hizo. Por supuesto, esto descuente servicios que el sistema cierra por alguna razón (presumiblemente su servicio no lo sería), y solo puede ayudarlo a reducirlo si más de un usuario está conectado a la vez (pero entonces, podría siempre registra ambos).

0
  1. Sólo tiene que abrir el Visor de sucesos (menú Inicio -> Buscar "Evento" Visor de sucesos vendrá, abrirlo)
  2. Expand 'de Windows Log' en el menú de la izquierda Visor de sucesos.
  3. Haga clic en la aplicación. (Se mostrará el error de aplicación con la descripción en la pestaña 'General'.
  4. Una vez más tratar de iniciar su servicio y de visor de eventos ver cuál es la causa exacta de una breve parada en la pestaña 'General'.
Cuestiones relacionadas