.NET Framework生成奇怪的DCOM错误

时间:2010-03-17 01:31:12

标签: .net com interop ms-word

我正在创建一个简单的应用程序,它可以合并Word和/或Excel文档中的键值对字段。直到今天,该应用程序已经很好地完成了。我使用的是最新版本的.NET Framework 4.0(因为它为Interop提供了一个很好的包装API)。我的样本合并方法如下所示:

public byte[] ProcessWordDocument(string path, List<KeyValuePair<string, string>> kvs)
{
  logger.InfoFormat("ProcessWordDocument: path = {0}", path);
  var localWordapp = new Word.Application();
  localWordapp.Visible = false;
  Word.Document doc = null;
  try
  {
    doc = localWordapp.Documents.Open(path, ReadOnly: false);
    logger.Debug("Executing Find->Replace...");
    foreach (Word.Range r in doc.StoryRanges)
    {
      foreach (KeyValuePair<string, string> kv in kvs)
      {
        r.Find.Execute(Replace: Word.WdReplace.wdReplaceAll,
            FindText: kv.Key,
            ReplaceWith: kv.Value, Wrap: Word.WdFindWrap.wdFindContinue);
      }
    }
    logger.Debug("Done! Saving document and cleaning up");
    doc.Save();
    doc.Close();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    localWordapp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(localWordapp);
    logger.Debug("Done.");
    return System.IO.File.ReadAllBytes(path);
  }
  catch (Exception ex)
  {
    // Logging...
    // doc.Close();
    if (doc != null)
    {
      doc.Close();
      System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
    }
    localWordapp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(localWordapp);
    throw;
  }
}

上面的C#代码段已经安装好了(编译并部署到Windows Server 2008 x64)并安装了最新的更新。但现在,突然间,我得到以下奇怪的错误:

System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID为{000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(来自HRESULT的异常: 0x80080005(CO_E_SERVER_EXEC_FAILURE))。    在System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&amp; canBeCached,RuntimeMethodHandleInternal&amp; ctor,Boolean&amp; bNeedSecurityCheck)    在System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache)    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean skipCheckThis,Boolean fillCache)    在System.Activator.CreateInstance(Type type,Boolean nonPublic)    在C:\ meeho \ src \ webservices \ Meeho.Integration \ OfficeHelper.cs中的Meeho.Integration.OfficeHelper.ProcessWordDocument(String path,List`1 kvs):第30行    在Meeho.IntegrationService.ConvertDocument(Byte []模板,字符串ext,String []字段,字符串[]值)在C:\ meeho \ src \ webservices \ MeehoService \ IntegrationService.asmx.cs:第49行

- 我用Google搜索了COM错误,但它没有返回特定值。我甚至使用mmc -32为COM dll提供了正确的权限,我分别分配了Word和Excel文档,并将执行权限设置为管理员。但是,我无法通过上面给出的确切COM CLSID找到dll。很沮丧。

请,请帮助我,因为该应用程序目前已停止生产。

的Anders


编辑:Windows事件日志的输出: 错误应用程序名称:WINWORD.EXE,版本:12.0.6514.5000,时间戳:0x4a89d533 故障模块名称:未知,版本:0.0.0.0,时间戳:0x00000000 异常代码:0xc0000005 故障偏移:0x00000000 错误进程id:0x720 故障应用程序启动时间:0x01cac571c4f82a7b 错误应用程序路径:C:\ Program Files(x86)\ Microsoft Office \ Office12 \ WINWORD.EXE 错误模块路径:未知 报告编号:041dd5f9-3165-11df-b96a-0025643cefe6

-       1000   2   100   0x80000000000000       2963   应用   meeho3        -   WINWORD.EXE   12.0.6514.5000   4a89d533   未知   0.0.0.0   00000000   C0000005   00000000   720   01cac571c4f82a7b   C:\ Program Files(x86)\ Microsoft Office \ Office12 \ WINWORD.EXE   未知   041dd5f9-3165-11df-B96A-0025643cefe6      

1 个答案:

答案 0 :(得分:0)

重新安装Office 2007 Enterprise Ed。解决了这个问题。但令人头疼的是什么。