Убить мертвых экземпляров Excel на сервере


У нас есть несколько устаревших программ (в VB6) генерации отчетов Excel. Они намечены задачи, выполняемые на сервере. Да, нарушать это.

В результате, мы получили много "мертвых" экземпляров 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);
    }
}


696
3
задан 12 октября 2011 в 09:10 Источник Поделиться
Комментарии
1 ответ

Ваш код представляется правильным, однако, это может быть опасно, потому что он будет убивать всех экземпляров Excel, которые работают таким образом, вы рискуете убить одного из Ваших в настоящее время работы с устаревшими программами. Есть надлежащие способы, чтобы очистить в Excel ресурсы - см. мой вопрос здесь на C# версии. У вас есть возможность обновления устаревших программ? Если так, я бы рекомендовал по этому поводу.

4
ответ дан 12 октября 2011 в 02:10 Источник Поделиться