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

有帮助吗?

解决方案

尝试这种情况:

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

其他提示

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

PIA 通过创建自己的一组对底层 COM 对象的引用来使这个问题变得更加复杂,除非您显式地让它们清理,否则它们不会清理这些引用。正是由于这个原因,通过 PIA 使用 Excel 非常繁琐。

Application.Quit() (IIRC 这就是它的名字) 将要 如果引用全部正确清理,则关闭该进程。这意味着您必须仔细管理保存对 Excel 进程的 COM 引用的任何内容的生命周期,并确保正确清理所有 COM 引用。

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

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

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

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

免责声明:我拥有 SpreadsheetGear LLC

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top