2016-01-12 114 views
-2

我遇到了一个经典场景,在.NET中创建Word COM对象时(通过Microsoft.Office.Interop.Word程序集),WinWord进程不会退出,即使我正确关闭和释放物体。退出方法不杀死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(); 

为什么我有这个问题的任何想法?尽管我本地没有这个问题。只在生产服务器上。

+0

水晶球说:“不要将调试版本部署到生产服务器”。 –

+0

您**不能**从服务器环境运行Word。使用不同的技术重新设计您的应用程序。这是一个等待发生的技术性灾难,并且(取决于您的用户是谁),这可能违反了您的Office许可证。 Word经过设计和测试,可以在控制台与人交互的环境中运行。它会在非交互式服务中真正发生崩溃和不可预测的情况。请参阅http://support.microsoft.com/en-us/kb/257757。另外,[this](http://stackoverflow.com/a/30665967/2230)是已经涵盖这个的很多很多SO答案之一。 –

回答

-1

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

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

通常定位这样的代码的最佳位置是通过实施IDisposable的使用“处置”的方法。