Мне показалось, что у меня есть рабочее решение для преобразования файлов .mdi в PDF с использованием объектной модели визуализации документов Microsoft Office. Решение находится в службе Windows, но теперь я сталкиваюсь с некоторыми ошибками, из-за которых у меня возникают проблемы с поиском информации.
Исключение, которое я получаю:
Сервер выдал исключение.
(Исключение из HRESULT: 0x80010105
(RPC_E_SERVERFAULT))
System.Runtime.InteropServices.COMException
(0x80010105): сервер бросил
исключение. (Исключение из HRESULT:
0x80010105 (RPC_E_SERVERFAULT))
в MODI.DocumentClass.Create (String FileOpen)
at DocumentStore.Mdi2PDF (String path, String newPath)
Затем в средстве просмотра событий возникает следующая ошибка приложения:
Неисправное приложение
MyWindowsServiceName.exe, версия
1.0.0.0, отметка времени 0x4b97f185, неисправный модуль mso.dll, версия
12.0.6425.1000, отметка времени 0x49d65443, код исключения 0xc0000005, ошибка
смещение 0x0000bd8e, идентификатор процесса 0xa5c, время запуска приложения
0x01cac08cf032914b.
Вот метод, который делает преобразование:
private int? Mdi2PDF(String path, String newPath)
{
int? pageCount = null;
string tmpTif = Path.GetTempFileName();
MODI.Document mdiDoc = new MODI.Document();
mdiDoc.Create(path);
mdiDoc.SaveAs(tmpTif,
MODI.MiFILE_FORMAT.miFILE_FORMAT_TIFF_LOSSLESS,
MODI.MiCOMP_LEVEL.miCOMP_LEVEL_HIGH);
mdiDoc.Close(false);
pageCount = Tiff2PDF(tmpTif, newPath);
if (File.Exists(tmpTif))
File.Delete(tmpTif);
return pageCount;
}
Я удалил все потоки из службы, вызвав это, так что только основной поток инициализировал объект MODI, но все равно получил ошибку, поэтому он не имеет отношения к потокам.
Я также создал консольные приложения, конвертирующие сотни документов, и НЕ получил исключения.
Итак, похоже, это вызвано созданием слишком большого количества экземпляров объекта MODI, но только созданием экземпляра внутри Сервиса? Не совсем имеет смысла.
У кого-нибудь есть какие-либо подсказки об этих ошибках и о том, как их отлаживать дальше?