c #interop winword.exe没有退出()!

时间:2013-09-24 14:54:09

标签: c# interop quit

我将多个文档提供给下面的方法,并且在运行WinXP 32位到具有Office 2000以上版本的Win8 64位的超过15台不同的PC上看到winword.exe disapear。在运行Trend的Antivírus的1台梦魇PC上,winword.exe(始终,每次)使用“正在使用的文件”异常中断循环(关闭趋势图使其再次工作)。保持趋势的任何想法?

void loop()
{
Microsoft.Office.Interop.Word._Application app = new Microsoft.Office.Interop.Word.Application();
app.Visible = false; app.ScreenUpdating = false; app.DisplayAlerts = WdAlertLevel.wdAlertsNone;

Microsoft.Office.Interop.Word._Document doc = app.Documents.Open(FilePath, false, true, false);
doc.Activate(); doc.DisableFeatures = true;

doc.ExportAsFixedFormat(newFileName, WdExportFormat.wdExportFormatPDF, false,WdExportOptimizeFor.wdExportOptimizeForOnScreen, WdExportRange.wdExportCurrentPage, 1, 1, WdExportItem.wdExportDocumentWithMarkup, false, false, WdExportCreateBookmarks.wdExportCreateNoBookmarks, true, false, true, Type.Missing);

((Microsoft.Office.Interop.Word._Document)doc).Close(WdSaveOptions.wdDoNotSaveChanges);
Marshal.ReleaseComObject(doc);
Marshal.FinalReleaseComObject(doc);

((Microsoft.Office.Interop.Word._Application)app).Quit(WdSaveOptions.wdDoNotSaveChanges);
Marshal.ReleaseComObject(app);
Marshal.FinalReleaseComObject(app);

GC.GetTotalMemory(false);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
}

1 个答案:

答案 0 :(得分:0)

我遇到了与AV相似的问题。

你需要将它放入try catch中,然后在catch中添加Sleep(),然后重试。

我最终不得不弄清楚文件的大小来确定睡眠的时间长度(根据扫描进行的时间与扫描所花费的时间成正比)。

希望这足以让你前进?