.NET Framework генерирует странную ошибку DCOM - PullRequest
0 голосов
/ 17 марта 2010

Я создаю простое приложение, которое позволяет объединять поля пар ключ-значение в документе Word и / или Excel. До сегодняшнего дня приложение работало просто отлично. Я использую последнюю версию .NET Framework 4.0 (так как она предоставляет хороший интерфейс API для Interop). Мой метод слияния выглядит так:

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): Не удалось получить фабрику класса COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} из-за следующей ошибки: 80080005 Ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). at System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логический publicOnly, логический noCheck, логический & canBeCached, RuntimeMethodHandleInternal & ctor, логический & bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow (логическое publicOnly, логическое skipCheckThis, логическое fillCache) at System.RuntimeType.CreateInstanceDefaultCtor (логическое значение publicOnly, логическое значение skipVisibilityChecks, логическое значение skipCheckThis, логическое значение fillCache) в System.Activator.CreateInstance (тип Type, логическое значение nonPublic) в Meeho.Integration.OfficeHelper.ProcessWordDocument (String path, List`1 kvs) в C: \ meeho \ src \ webservices \ Meeho.Integration \ OfficeHelper.cs: строка 30 в Meeho.IntegrationService.ConvertDocument (шаблон Byte [], поля String ext, String [], значения String []) в C: \ meeho \ src \ webservices \ MeehoService \ IntegrationService.asmx.cs: строка 49

- Я погуглил ошибку COM, но она не возвращает ничего особенного. Я даже дал правильные разрешения для COM-DLL, используя mmc -32, где я выделил документы Word и Excel соответственно и установил права на выполнение для Администратора. Я не мог, однако, найти DLL по точному COM CLSID, указанному выше. Очень расстраивает.

Пожалуйста, пожалуйста, пожалуйста, помогите мне, поскольку приложение в данный момент снято с производства.

Anders


РЕДАКТИРОВАТЬ: вывод из журнала событий Windows: Неверное имя приложения: WINWORD.EXE, версия: 12.0.6514.5000, отметка времени: 0x4a89d533 Неисправное имя модуля: неизвестно, версия: 0.0.0.0, отметка времени: 0x00000000 Код исключения: 0xc0000005 Смещение ошибки: 0x00000000 Идентификатор ошибочного процесса: 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 голосов
/ 17 марта 2010

Переустановка Office 2007 Enterprise Ed.исправил проблему.Но какая головная боль.

...