C # получить дату / время запуска службы Windows - PullRequest
4 голосов
/ 18 декабря 2009

Есть ли способ получить дату / время, когда служба последний раз запускалась в C #?

Я сейчас использую этот код для проверки статуса услуг:

ServiceController sc = new ServiceController(serviceName);
// check sc.status for "Running" etc... with a Switch statement... 

Могу ли я сделать это с этим объектом? Или нужен WMI?

Причина: я пишу небольшой монитор BizTalk, и общая проблема заключается в том, что люди часто забывают перезапустить службу BizTalk (экземпляры хоста) после выполнения развертывания. Я хочу показать время его последнего запуска.

Ответы [ 3 ]

7 голосов
/ 18 декабря 2009

В приложении C # напишите

 using System.Diagnostics;
 private static DateTime GetStartTime(string processName)
 {
    Process[] processes = 
        Process.GetProcessesByName(processName);
    if (processes.Length == 0) 
       throw new ApplicationException(string.Format(
          "Process {0} is not running.", processName));
    // -----------------------------
    DateTime retVal = DateTime.Now;
    foreach(Process p in processes)
       if (p.StartTime < retVal) 
          retVal = p.StartTime;

    return retVal ;
 }

если имя процесса не запущено, это вызывает исключение, измените его для реализации любого альтернативного поведения, которое вы хотите. Кроме того, если запущено несколько экземпляров этого процесса, он возвращается при запуске самого раннего из них ...

2 голосов
/ 18 декабря 2009

Это должно сделать правильный поиск для вас. Изменить при необходимости!

public List<Hashtable> GetEventEntryByEvent(
            ref string logName, ref string machineName, 
            ref string source)
        {
            try
            {
                //Create our list
                List<Hashtable> events = new List<Hashtable>();

                //Connect to the EventLog of the specified machine
                EventLog log = new EventLog(logName, machineName);

                //Now we want to loop through each entry
                foreach (EventLogEntry entry in log.Entries)
                {
                    //If we run across one with the right entry source
                    //  we create a new Hashtable
                    //  then we add the Message,Source, and TimeWritten values
                    //  from that entry
                    if (entry.Source == source)
                    {
                        Hashtable entryInfo = new Hashtable();

                        entryInfo.Add("Message", entry.Message);
                        entryInfo.Add("InstanceId", entry.InstanceId);
                        entryInfo.Add("Source", entry.Source);
                        entryInfo.Add("TimeWritten", entry.TimeWritten);
                        // You can also replace TimeWritten with TimeGenerated
                        //Add this new Hashtable to our list
                        events.Add(entryInfo);

                        entryInfo = null;
                    }
                }
                //Return the results
                return events;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return null;
            }
        }
1 голос
/ 18 декабря 2009

Учитывая, что эта информация не отображается в диспетчере служб, ее, вероятно, нельзя найти с помощью класса ServiceController (и я тоже там ничего не видел).

При этом попробуйте взглянуть на Журнал событий . Событие генерируется автоматически при запуске и остановке службы.

...