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

发布于 2024-11-29 20:26:32 字数 312 浏览 2 评论 0原文

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

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

close() 是错误的方法吗?

请帮助我并为我指明如何正确终止这些进程的正确方向。 =)

~~~更新~~~

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

I'm writing an application that needed a MSWord document parser.

I'm using Microsoft.Office.Interop.Word.Document to extract the texts from the documents, but even if i use doc.Close() the document, from taskManager i can see that winword.exe are not killed, and after parsing a couple dozens documents it eats up some much resources.

is close() the wrong method?

please help me and point me to the right direction on how to terminate these processes properly. =)

~~~update~~~

Thanks for all the help. I use the app.quit() and also ran a loop that checks for the process and problem solved! =)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

☆獨立☆ 2024-12-06 20:26:32

您是否正在调用 Application.Quit ,此外,由于您正在进行互操作,因此可能值得发布 RCW 包装器

所以基本上是这样的:

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

注意有些人使用: ReleaseComObject 但也有一些 潜在陷阱

Are you calling Application.Quit , additionally since you're doing Interop it may be worthwhile to release the RCW wrapper.

So basically something like:

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

Note some folks use: ReleaseComObject but there are some potential pitfalls

伪心 2024-12-06 20:26:32

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

You must quit the application instance using app.quit(). Document.close() will just close the document. I also suggest setting app.visible = true when you're done processing so your user can close it themselves if all else fails.

凯凯我们等你回来 2024-12-06 20:26:32

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

After performing the app.Quit(), you must do app = null; From my experiences, this will prevent leftover processes from hanging around. Just be sure to do the app.Quit() and app = null in your exception handler as well.

萧瑟寒风 2024-12-06 20:26:32

如果您想结束该进程,您需要在 Application 对象上调用 Quit - 请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx

If you want to end the process you need to call Quit on the Application object - see http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx

等风来 2024-12-06 20:26:32

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

I am thinking close just handles the document open inside word. Remember you can have more than 1 word document open with 1 application. You may want to try either a dispose method, or look at the word objects quit/exit methods (can't remember its been a while).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文