Я создаю простое приложение, которое отвечает за сбор файлов Office, найденных в определенном forlder, а затем преобразование их в XPS, чтобы их можно было легко представить в элементе управления интерфейса WPF.
Для этого я использую WOrd, Excell, офисное взаимодействие powwerpoint, собранное в моем проекте.
До сих пор прекрасно работает, он конвертирует, но время от времени он конвертирует все документы как талисман и тестирует после того, как конвертирует только одно или 2 поля и возвращает следующее исполнение:
"Не удалось получить фабрику класса COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} из-за следующей ошибки: 80070005 Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))."
Исключение составляет retunr при попытке создать объект Word.Application
__wordApplication = new Microsoft.Office.Interop.Word.Application();
Вот мой метод конвертации
private static void ConvertFromWord(IDocument Doc)
{
__wordApplication = new Microsoft.Office.Interop.Word.Application();
__wordApplication.Visible = false;
__wordApplication.DisplayAlerts = WdAlertLevel.wdAlertsNone;
//if (__isWordInitialized == false)
// InitializeWord();
Word.Document wordDocument = null;
object pSourceDocPath = Path.Combine(new Uri(Doc.OriginalPath).LocalPath,Doc.OriginalFile);
object paramMissing = Type.Missing;
string pExportFilePath =MyExtensions.IsNullOrWhiteSpace(Doc.ConvertedFile) ? GetUniqueXpsFile(new Uri(Doc.ConvertedPath).LocalPath) : Doc.ConvertedFile;
Doc.ConvertedFile = Path.GetFileName(pExportFilePath);
try
{
var pExportFormat = Word.WdExportFormat.wdExportFormatXPS;
bool pOpenAfterExport = false;
var pExportOptimizeFor = Word.WdExportOptimizeFor.wdExportOptimizeForOnScreen;
var pExportRange = Word.WdExportRange.wdExportAllDocument;
int pStartPage = 0;
int pEndPage = 0;
var pExportItem = Word.WdExportItem.wdExportDocumentContent;
var pIncludeDocProps = true;
var pKeepIRM = true;
var pCreateBookmarks = Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
var pDocStructureTags = true;
var pBitmapMissingFonts = true;
var pUseISO19005_1 = false;
//var pFixedFormatExtClassPtr=;
try
{
try
{
wordDocument = __wordApplication.Documents.Open(ref pSourceDocPath,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing,
ref paramMissing
);
}
catch (Exception exc)
{
//return new OfficeToXpsConversionResult(Solatys.Office.Lib.Types.Types.ConversionResult.ErrorUnableToOpenOfficeFile, exc.Message, exc);
}
if (wordDocument != null)
{
try
{
wordDocument.ExportAsFixedFormat(
pExportFilePath,
pExportFormat,
pOpenAfterExport,
pExportOptimizeFor,
pExportRange,
pStartPage,
pEndPage,
pExportItem,
pIncludeDocProps,
pKeepIRM,
pCreateBookmarks,
pDocStructureTags,
pBitmapMissingFonts,
pUseISO19005_1,
ref paramMissing
);
}
catch (Exception exc)
{
// return new OfficeToXpsConversionResult(Solatys.Office.Lib.Types.Types.ConversionResult.ErrorUnableToExportToXps, "Word", exc);
}
}
else
{
//return new OfficeToXpsConversionResult(Solatys.Office.Lib.Types.Types.ConversionResult.ErrorUnableToOpenOfficeFile);
}
}
finally
{
// Close and release the Document object.
if (wordDocument != null)
{
wordDocument.Close(ref paramMissing, ref paramMissing,ref paramMissing);
wordDocument = null;
}
// Quit Word and release the ApplicationClass object.
if (__wordApplication != null)
{
__wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
__wordApplication = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
__isWordInitialized=false;
}
}
catch (Exception exc)
{
//return new OfficeToXpsConversionResult(Solatys.Office.Lib.Types.Types.ConversionResult.ErrorUnableToAccessOfficeInterop, "Word", exc);
}
Doc.ConvertedFile = pExportFilePath;
KillWord();
}
Есть идеи, что может быть не так?
Странно также то, что в зависимости от объема документа я могу получить исключение COMEx в той же строке, где создается объект приложения. Я начинаю очень злиться: - (
С уважением
саржа