如何通过.NET代码杀死Excel.exe?

其实我正在写一个小的应用程序(Win Form + C#),在那里我正在阅读Excel文件。 从应用程序退出并去任务pipe理器后,我发现Excel.exe仍在运行。 而当我运行我的应用程序多次,我发现在任务pipe理器中运行Excel.exe的多个实例。

所以,有人可以告诉我,每次我退出应用程序时需要做什么来杀死“Excel.exe”…

代码有点像这样:

ApplicationClass appClass = new ApplicationClass(); Workbook workBook = appClass.Workbooks.Open(path,0,true,5,"","",true,XlPlatform.xlWindows,"\t",false,false,0,true,1,0); Worksheet workSheet = (Worksheet)workBook.ActiveSheet; 

所有在这个命名空间下:Microsoft.Office.Interop.Excel; 那就是COM

你如何阅读Excel文件? 如果您使用COM,则需要在完成后调用Application.Quit

编辑:从你的评论中的代码 –

 //Initializing the application class ApplicationClass appClass = new ApplicationClass(); try { Workbook workBook = appClass.Workbooks.Open(path,0,true,5,"","",true,XlPlatform.xlWindows,"\t",false,false,0,true,1,0); Worksheet workSheet = (Worksheet)workBook.ActiveSheet; // do stuff with the workbook } finally { appClass.Quit(); } 

而不是杀死进程…为什么你不正确地处理你的Excel处理呢? 听起来就像你打开Excel的实例,而没有正确closures它们。 在使用它们之后释放获取的资源通常是一个好主意。

这个答案假设你通过Process.Start启动Excel。 代码直到后来才发布。

在这种情况下,请保持由该调用返回的进程句柄,然后使用它来调用Process.CloseMainWindow接着Process.Close

 Process ExcelProcess; // Declaration 

存储进程句柄:

 ExcelProcess = Process.Start(...); 

那么当你退出你的应用程序时:

 // Close process by sending a close message to its main window. ExcelProcess.CloseMainWindow(); // Free resources associated with process. ExcelProcess.Close(); 
 Process[] pro = Process.GetProcessesByName("excel"); pro[0].Kill(); pro[0].WaitForExit(); 

它容易这样。 你可以通过名字,ID等获得进程,只需要去你的进程,Kill()和WaitForExit();

在我的情况下,在一些任务中,我做了app.Quit()调用后,excel实例仍在运行。

我的解决scheme是:

 application = null; GC.Collect(); GC.WaitForPendingFinalizers(); 

将应用程序实例设置为null,并强制调用GC。

希望这个帮助