【问题标题】:Excel application freezes while initializing object using Microsoft.Office.Interop.ExcelExcel 应用程序在使用 Microsoft.Office.Interop.Excel 初始化对象时冻结
【发布时间】:2021-03-29 21:32:53
【问题描述】:

我使用 dll Microsoft.Office.Interop.Excel 版本 15.0.0.0 并创建如下对象

Application excelApp = new Application();

执行挂在上面一行。

我已经在 finally 块中释放了 COM 对象,如下所示

GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(excelApp);

它是在 citrix 上发布的 WPF 应用程序。它在 citrix server 在 windows 2008 中运行时可以工作。但后来它升级到 windows 2016。 上述代码行中的 excel 冻结问题是间歇性的。它适用于少数用户,不适用于其他用户。

我可以知道如何解决这个问题。

我检查了事件查看器,它给出了 DistributedCOM 错误,而不是在创建 excel 对象时。我附上了事件查看器的图片。 enter image description here

【问题讨论】:

    标签: excel office-interop citrix


    【解决方案1】:

    无需使用Marshal.FinalReleaseComObject 方法,而是尽可能使用Marshal.ReleaseComObject 方法。

    以下是微软对此的声明:

    Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定Office 在此环境中运行时的行为和/或死锁。

    如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将在整体解决方案的稳定性方面承担风险。

    Considerations for server-side Automation of Office 文章中了解更多信息。

    如果您只处理开放的 XML 文档,您可以考虑使用Open XML SDK。否则,您可以考虑使用为服务器端执行而设计的组件。

    【讨论】:

    • 我试过了,但没有用。我检查了事件查看器,它给出了 DistributedCOM 错误。不完全是在创建 excel 对象时。我附上了事件查看器的图片。
    • 这就是Microsoft states for the issue。使用为服务器端执行而设计的 Open XML SDK 或第三方组件。
    • 但是当从我们在 citrix 上发布的应用程序导出时,有时会打开 excel。大多数时候它会冻结。为什么是断断续续的?这个问题应该是针对所有用户的,但事实并非如此。有许多 citrix 服务器,用户将在其中运行我们的应用程序,其中很少有人可以运行,也很少有人无法运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2022-06-12
    • 2013-05-12
    • 2019-03-26
    相关资源
    最近更新 更多