Убить мертвые экземпляры Excel на сервере - PullRequest
0 голосов
/ 12 октября 2011

У нас есть несколько устаревших программ (vb6), создающих отчет Excel. Это запланированные задачи, выполняемые на сервере. Да, нарушите это: http://support.microsoft.com/kb/257757

В результате мы получили множество «мертвых» экземпляров Excel на сервере. Я намерен написать программу для очистки этих мертвых. Какой правильный способ убить простаивающий экземпляр. Я знаю, что это не очень хорошая практика, но мне кажется, что это самый простой способ. Вот мой код:

Process[] procs = Process.GetProcessesByName("EXCEL");

List<ProcessInfo> beginProcessInfoList = new List<ProcessInfo>();
foreach (Process p in procs)
{
    if (p.HasExited)
        continue;
    try
    {
        ProcessInfo pi = new ProcessInfo() { PID = p.Id, TotalProcessorTime = p.TotalProcessorTime };
        beginProcessInfoList.Add(pi);
    }
    catch (Exception exp)
    {
        this.Log(exp.Message);
    }
}

Thread.Sleep(TimeSpan.FromSeconds(10));

foreach (Process p in procs)
{
    if (p.HasExited)
        continue;
    try
    {
        p.Refresh();
        if (p.TotalProcessorTime - beginProcessInfoList.Single(pi => pi.PID == p.Id).TotalProcessorTime == TimeSpan.FromSeconds(0))
        {
            p.Kill();
            p.WaitForExit();
            this.Log(string.Format("EXCEL started at {0} killed at {1}.", p.StartTime, DateTime.Now));
        }
    }
    catch (Exception exp)
    {
        this.Log(exp.Message);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...