如何通过.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它们。 在使用它们之后释放获取的资源通常是一个好主意。
看看这个例子 – http://www.dreamincode.net/code/snippet1543.htm
它使用Process.Kill()方法 – http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx
这个答案假设你通过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。
希望这个帮助