我正在使用 ASP.NET/C# 程序中的 Microsoft Word 文档。
我的程序在内部打开 Word 文档。使用
app = new Word.Application();
app.Documents.Open
它创建了一个winword.exe进程的实例,我可以在任务管理器中看到它。
即使我使用 close()
和 app.quit()
关闭 Doc。它应该杀死该进程。但这个进程不会被杀死。
知道如何以编程方式终止此进程。
最佳答案
首先,我同意 Arthur 和 Ivo 的观点:不要在服务器上使用 Word 自动化...它不受支持,而且很痛苦。
- 如果可以,请尝试通过 DOCX 格式支持 Word 输入/输出(fully documented XML format 使用 .NET Framework 支持的压缩进行打包,并受 Office 2007 之前版本的插件支持)
- 如果不创建一个服务来处理队列中的请求,以防止多个线程同时使用它(ala Ivo's answer )
如果您必须使用Word自动化:
- 确保您设置尽可能多的应用程序选项以防止出现对话框
- 确保您传入 WdSaveOptions.wdDoNotSaveChanges至 Document.Close
- 查看此文档:How To: Dismiss a Dialog Box Displayed by an Office Application with Visual Basic .NET (显然也适用于 C#)
- 请务必调用 Marshal.ReleaseComObject Document 和 Application 对象,并确保它位于 finally block 中。
如果您按照上述操作,winword.exe 应该消失,您不需要终止该进程。
编辑:实际上并不是您问题的答案,但仍然与主题相关。请记住,您还会在服务器上遇到权限问题。确保为其创建特定用户并将该用户用作您的 AppPool 身份(或服务身份)。然后您需要执行以下操作:
- 显然,请确保您已安装自动化组件
- 运行“dcomcnfg”
- 组件服务 -> 计算机 -> 我的计算机 -> COM+ 应用程序
- “Microsoft Word 文档”(或“
{000209FF-0000-0000-C000-000000000046}
”)-> 属性 - “安全”选项卡 ->“启动和激活权限”->“自定义”
- 点击“编辑”并从上方添加您的 AppPool 用户
- 重复步骤 5-6,但选择“访问权限”
最重要的是,尽管有上面的对话框选项,您仍然可能需要以 AppPool 用户身份直接从服务器运行一次 winword.exe 来初始设置配置文件。
关于ASP.net C# - WINWORD.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828599/