1

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

4

4 回答 4

4

试试这个:

foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
        {
            if (process.MainModule.ModuleName.ToUpper().Equals("EXCEL.EXE"))
            {
                process.Kill();
                break;
            }
        }
于 2010-02-26T10:02:02.240 回答
4

我大约 99% 确定您的问题是由悬挂的 COM 引用导致 Excel 进程无法关闭造成的。Excel 尤其容易出现这种情况,因为它倾向于透明地生成 COM 引用,而不会给您提供获取它们的句柄并明确关闭它们的方法。

PIA 通过对底层 COM 对象进行自己的一组引用来复杂化这个问题,除非您明确让他们这样做,否则它们不会清理这些对象。正是由于这个原因,通过 PIA 使用 Excel 非常繁琐。

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

于 2010-02-26T10:13:04.307 回答
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);
于 2011-06-21T18:37:00.580 回答
0

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

您可以在此处查看带有 C# 和 VB 源代码的实时 ASP.NET 示例,在此处了解有关 SpreadsheetGear 的 Windows 窗体控件和示例的更多信息,如果您想自己尝试,请在此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2010-02-26T17:58:16.200 回答