如何停止我从C#.Net应用程序启动的Excel进程?

时间:2010-02-26 09:44:37

标签: .net excel com process office-pia

我正在从C#.Net应用程序运行Excel,并且无法让关闭进程。如何让Excel进程从我的C#程序中正确关闭?

4 个答案:

答案 0 :(得分:4)

试试这个:

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
        {
            if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
            {
                process.Kill();
                break;
            }
        }

答案 1 :(得分:4)

我大约99%确定您的问题是由悬空的COM引用导致的,导致Excel进程无法关闭。 Excel特别容易出现这种情况,因为它倾向于透明地生成COM引用,而不会让您获得处理句柄并明确关闭它们的方法。

PIA通过对基础COM对象进行自己的一组引用来解决这个问题,除非你明确地让它们这样做,否则它们不会被清除。正是由于这个原因,通过PIA使用Excel非常繁琐。

Application.Quit()(IIRC这就是所谓的) 如果所有引用都已正确清理,则会关闭该进程。这意味着您必须仔细管理包含COM引用Excel进程的任何内容的生命周期,并确保正确清理所有COM引用。

答案 2 :(得分:1)

Application app = new Application();
...
EndTask((IntPtr)app.Hwnd, true, true);

[DllImport("user32.dll")]
public static extern bool EndTask(IntPtr hwnd, bool shutdown, bool force);

答案 3 :(得分:0)

根据您的需要,您可以考虑使用SpreadsheetGear for .NET,它为您提供了一个没有COM Interop的Excel兼容组件(没有挂起的实例,更好的性能,不必担心是否安装了Excel或者是哪个版本的安装了Excel)。

您可以使用C#和VB源here查看实时ASP.NET示例,了解有关SpreadsheetGear的Windows窗体控件和示例here的详细信息,并在需要时下载免费试用here自己尝试一下。

免责声明:我拥有SpreadsheetGear LLC