【问题标题】:Quit method not killing WINWORD processes退出方法不会杀死 WINWORD 进程
【发布时间】:2016-04-17 00:13:09
【问题描述】:

我遇到了一个经典场景,在 .NET 中(通过 Microsoft.Office.Interop.Word 程序集)创建 Word COM 对象时,即使我正确关闭和释放 WinWord 进程也不会退出对象。

下面是我的代码:

 // Quit Word and release the ApplicationClass object.
        if (oWordApp != null)
        {
            oWordApp.Quit(ref missing, ref missing,
                ref missing);

            oWordApp = null;
        }

        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();

知道我为什么会遇到这个问题吗?不过我在本地没有这个问题。仅在生产服务器上。

【问题讨论】:

  • 水晶球说:“不要将调试版本部署到生产服务器”。
  • 不能从服务器环境运行 Word。使用不同的技术重新设计您的应用程序。这是一场等待发生的技术灾难,并且(取决于您的用户)它可能违反了您的 Office 许可证。 Word 被设计和测试为在控制台上与人类交互的环境中运行。它真的会在非交互式服务中意外崩溃和烧毁。见support.microsoft.com/en-us/kb/257757。此外,this 是已经涵盖此问题的众多 SO 答案之一。

标签: c# .net com ms-word office-interop


【解决方案1】:

COM 对象应通过减少引用计数使其为零来终止。

if (Marshal.IsComObject(oWordApp)) { Marshal.ReleaseComObject(oWordApp); }

通常找到此类代码的最佳位置是通过实现 IDisposable 来使用“Dispose”方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2016-01-24
    • 2015-02-18
    相关资源
    最近更新 更多