Я создаю простое приложение, которое позволяет объединять поля пар ключ-значение в документе 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