如何停止从 C# .Net 应用程序启动的 Excel 进程?
我正在从 C# .Net 应用程序运行 Excel,但无法关闭该进程。如何从我的 C# 程序中正确关闭 Excel 进程?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在从 C# .Net 应用程序运行 Excel,但无法关闭该进程。如何从我的 C# 程序中正确关闭 Excel 进程?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
试试这个:
Try this:
我大约 99% 确定您的问题是由悬挂的 COM 引用阻止 Excel 进程关闭引起的。 Excel 特别容易出现这种情况,因为它倾向于透明地生成 COM 引用,而不为您提供获取其句柄并显式关闭它们的方法。
PIA 通过创建自己的一组对底层 COM 对象的引用来使这个问题变得更加复杂,除非您显式地让它们清理,否则它们不会清理这些引用。正是由于这个原因,通过 PIA 使用 Excel 非常繁琐。
Application.Quit()
(IIRC 这就是它的名字)如果引用全部被正确清理,将关闭进程。这意味着您必须仔细管理保存对 Excel 进程的 COM 引用的任何内容的生命周期,并确保正确清理所有 COM 引用。I'm about 99% certain that your problem is caused by dangling COM references preventing the Excel process from shutting down. Excel is particularly prone to this as it tends to transparently generate COM references without giving you the means to get at their handles and explicitly shut them down.
The PIAs compound this problem by making their own set of references to the underlying COM objects that they do not clean up unless you explicitly make them do it. Working with Excel through the PIAs is quite fiddly for precisely this reason.
Application.Quit()
(IIRC this is what it's called) will shut down the process if the references are all correctly cleaned up. This means that you have to carefully manage the life cycle of anything that holds COM references to the Excel process and make sure that all COM references are cleaned up properly.根据您的需要,您可以考虑使用 SpreadsheetGear for .NET,它为您提供了一个无需 COM 的 Excel 兼容组件Interop(无挂起实例,性能更好,不必担心是否安装了 Excel 或安装了哪个版本的 Excel)。
您可以在此处查看使用 C# 和 VB 源代码的实时 ASP.NET 示例,了解有关 SpreadsheetGear 的更多信息Windows 窗体控件和示例此处,并下载免费试用版此处。
免责声明:我拥有 SpreadsheetGear LLC
Depending on your needs, you might consider using SpreadsheetGear for .NET which gives you an Excel compatible component with no COM Interop (no hanging instances, better performance, don't have to worry whether Excel is installed or which version of Excel is installed).
You can see live ASP.NET samples with C# and VB source here, learn more about SpreadsheetGear's Windows Forms controls and samples here, and download a free trial here if you want to try it yourself.
Disclaimer: I own SpreadsheetGear LLC