¿Obtener recuento de reinicio del servidor en un día usando c #?

¿Es posible obtener la cantidad de veces que se reinicia un servidor en un período de tiempo usando c #?

He visto esta publicación que está obteniendo el último tiempo de cierre de Windows Obtenga la fecha y la hora del último evento de cierre de Windows usando .NET

¿Cualquier sugerencia?

¿Has considerado leer del registro de eventos del servidor?

El origen de eventos del sistema ‘USER32’ registra paradas.

Por lo que he leído, parece que también debería poder leer programáticamente el registro de eventos de una máquina remota ( vea Cómo administrar los registros de eventos usando Visual C # .NET o Visual C # 2005 )

EDITAR

La siguiente aplicación de consola funcionará al consultar el inicio de sesión uniforme en una máquina remota para el tipo USER32.

Todo lo que tiene que hacer es conectar la comparación de fecha / hora y agregar el nombre de su servidor. Es un poco áspero y listo, pero estoy seguro de que puede embellecerlo un poco si lo desea.

using System; using System.Diagnostics; namespace ReadEventLog { class Program { static void Main(string[] args) { string logType = "System"; //use this if your are are running the app on the server //EventLog ev = new EventLog(logType, System.Environment.MachineName); //use this if you are running the app remotely EventLog ev = new EventLog(logType, "[youservername]"); if (ev.Entries.Count <= 0) Console.WriteLine("No Event Logs in the Log :" + logType); // Loop through the event log records. for (int i = ev.Entries.Count - 1; i >= 0; i--) { EventLogEntry CurrentEntry = ev.Entries[i]; //use DateTime type to compare on CurrentEntry.TimeGenerated DateTime dt = DateTime.Now; TimeSpan ts = dt.Subtract( CurrentEntry.TimeGenerated); int hours = (ts.Days * 24) + ts.Hours; if (CurrentEntry.Source.ToUpper() == "USER32") { Console.WriteLine("Time Generated:" + CurrentEntry.TimeGenerated); Console.WriteLine("Hours ago:" + hours); Console.WriteLine("Event ID : " + CurrentEntry.InstanceId); Console.WriteLine("Entry Type : " + CurrentEntry.EntryType.ToString()); Console.WriteLine("Message : " + CurrentEntry.Message + "\n"); } } ev.Close(); } } } 

Podría crear un servicio de Windows y registrar el evento de inicio. De esa manera, sabrá cuántas veces se ha iniciado el servicio (y se ha cerrado).