C# 我必须关闭Word互操作应用程序吗?

C# 我必须关闭Word互操作应用程序吗?,c#,ms-word,office-interop,C#,Ms Word,Office Interop,我正在使用以下代码: using MSWord = Microsoft.Office.Interop.Word; . . . MSWord.Application wordApp = new MSWord.Application(); MSWord.Document wordDoc = new MSWord.Document(); wordDoc = wordApp.Documents.Add(Template: oTemplatePath); //do something with

我正在使用以下代码:

using MSWord = Microsoft.Office.Interop.Word;

.
.
.

MSWord.Application wordApp = new MSWord.Application();

MSWord.Document wordDoc = new MSWord.Document();

wordDoc = wordApp.Documents.Add(Template: oTemplatePath);

//do something with the Document... replace fields and so on...

wordApp.Visible = true;
例如,该功能退出,我的应用程序关闭。 现在,用户可以编辑打开的文档,并将其保存或关闭


我是否必须以编程方式关闭应用程序对象(就COM对象等而言)???或者这是垃圾收集器吗?

你没事。当您调用新的MSWord.Application()时一个新的Ms Word进程启动并管理文档


你不必担心。如果向用户显示文档,当用户关闭文档时,所有操作都将完成。

如果要在使用Microsoft.Interop时正确关闭/处置COM对象 您可能希望使用此方法

System.Runtime.InteropServices.Marshal.ReleaseComObject( "Replace with your ComObject Here"); 
例如,如果我创建了一个名为wordApp的对象,我会像这样声明它,并像下面那样处理它

MSWord.Application wordApp = new MSWord.Application();
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp); 
这可以为您提供一个如何使用ReleaseComObject的示例

我的情况与您不同(我正在阅读Excel文件),但在我的情况下,我需要关闭正在使用的工作簿并退出应用程序(代码),否则Excel.EXE进程将在任务管理器中保持打开状态,即使在我关闭正在阅读的文档(关闭Excel)后也是如此。Henrik,请注意DJ KRAZE answer上的评论。如果您不打算再使用对象,那么使用Marshal.finalEleaseComObject(…)是否更安全?除了他没有处理COM对象,因为Microsoft.Office.Interop.Word命名空间是管理的,并自动处理Word COM接口。因此,如果我没有弄错的话,wordApp是由GAC在方法/application.LMB的末尾自动收集的,Microsoft Interop是一个更好地被称为OleAutomation的应用程序,或者是COM Interop。。除此之外,他还能如何让MSWord应用程序工作呢?当然,先生,Microsoft.Office.Interop.Word确实使用COM Interop。它这样做是为了您不必处理COM对象。它被称为抽象层。Microsoft.Office.Interop.Word的唯一目的是防止您处理自动化的复杂性。正如您在MSDN中所读到的“Microsoft.Office.Interop.Word命名空间的类型和成员为Microsoft Word 2010的COM对象模型和自动化Word的托管应用程序之间的互操作性提供了支持”好的,非常感谢大家!我测试了这些建议,发现当我在不释放com对象的情况下使用代码并想关闭windows时,它会要求我保存打开(但不可见)的文档。当我使用System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp)时;然后windows没有问我,一切都很好。因此,我认为我可以释放com对象,即使真实的Word文档对用户来说仍然是打开和可编辑的。我希望我没有错过什么,但它似乎起作用了@DJKRAZE你能不能把你在这个问题上弄得一团糟?你在说什么。。我只是说你的回答不完全正确。。。我很想知道这个解决方案是否对OP有帮助