c#MSOffice Interop Word不会杀死winword.exe

时间:2011-08-15 20:04:55

标签: c# interop zombie-process

我正在编写一个需要MSWord文档解析器的应用程序。

我正在使用Microsoft.Office.Interop.Word.Document从文档中提取文本,但即使我使用doc.Close()文件,从taskManager我可以看到winword.exe没有被杀死,在解析了几十个文档之后,它会耗尽一些资源。

是close()错误的方法吗?

请帮助我,并指出如何正确终止这些流程的正确方向。 =)

~~~更新~~~

感谢所有帮助。我使用app.quit()并运行一个循环来检查进程并解决问题! =)

5 个答案:

答案 0 :(得分:17)

您是否正在调用Application.Quit,此外,因为您正在使用Interop,因此发布RCW wrapper可能是值得的。

所以基本上是这样的:

yourWordAppObject.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(yourWordAppObject);

请注意,有些人会使用:ReleaseComObject,但有一些potential pitfalls

答案 1 :(得分:3)

您必须使用app.quit()退出应用程序实例。 Document.close()将关闭文档。我还建议您在完成处理后设置app.visible = true,这样如果所有其他方法都失败,您的用户可以自行关闭它。

答案 2 :(得分:2)

如果您要结束此过程,则需要致电Quit对象上的Application - 请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx

答案 3 :(得分:2)

执行app.Quit()后,你必须执行app = null;根据我的经验,这将防止剩余的进程闲逛。请务必在异常处理程序中执行app.Quit()和app = null。

答案 4 :(得分:0)

我正在考虑关闭只是处理单词中打开的文档。请记住,您可以使用1个应用程序打开多个单词文档。您可能想尝试使用dispose方法,或者查看单词对象退出/退出方法(不记得它已经有一段时间了)。