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

时间:2010-07-07 10:55:07

标签: c# excel

实际上我正在编写一个小应用程序(WinForms + C#),我正在阅读Excel文件。退出应用程序并转到任务管理器后,我发现Excel.exe仍在运行。当我多次运行我的应用程序时,我发现在任务管理器中运行了多个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

6 个答案:

答案 0 :(得分:9)

您是如何阅读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();
}

答案 1 :(得分:5)

而不是杀死进程......为什么不正确处理Excel句柄呢?听起来像是打开Excel实例而没有正确关闭它们。 在使用它们之后发布获得的资源通常是一个好主意。

答案 2 :(得分:2)

答案 3 :(得分:2)

此答案假设您通过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();

答案 4 :(得分:2)

Process[] pro = Process.GetProcessesByName("excel");

            pro[0].Kill();
            pro[0].WaitForExit();
这很容易。你可以按名称,id等进行处理。只需转到你的进程,Kill()和WaitForExit();

答案 5 :(得分:0)

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

我的解决方案是:

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

将app实例设为null并对GC进行强制调用。

希望这个帮助