У нас есть несколько устаревших программ (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);
}
}