【发布时间】:2011-07-05 16:10:38
【问题描述】:
我需要从我的 .Net4 应用程序自动化办公文档(Word 和 Excel)。
由于我不能真正强制我的用户使用特定的 Office 版本,因此我不使用互操作程序集或 tlbimp,因此我的项目不包含任何额外的引用,如果未安装 Office,整个应用程序也不会失败(功能将不可用)。
相反,我询问系统哪个 COM 服务器可以处理“Word.Application”或“Excel.Application”:
dynamic app = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
app.Foo();
我担心在完成“app”对象后如何正确处理它,因为现在我需要担心两个内部管理系统(COM 引用计数和 .Net 引用跟踪)。理想情况下,我应该能够将动态应用程序对象包装到一次性包装器类中,并确保在处理包装器时未引用底层 COM 对象。
编辑:另外我想知道当我完成它时如何正确地使 COM 对象“继续存在”,因为 Word 是在一个单独的进程中。我应该能够实例化 Word 应用程序,使其自动化,然后释放我的所有引用,但 Word 应用程序应该保持打开状态。
【问题讨论】:
-
不一定,重复的候选更多是关于C#中COM的实例化方面,这个问题是关于处置的。
-
确保你也处理掉任何中间 COM 对象 - stackoverflow.com/a/158752/188926
标签: c# .net com com-interop