ASP.net C# - WINWORD.exe

san*_*dip 3 asp.net ms-office

我正在使用ASP.NET/C#程序中的Microsoft Word文档.

我的程序在内部打开word文档.运用

app = new Word.Application();
app.Documents.Open
Run Code Online (Sandbox Code Playgroud)

它创建了一个winword.exe进程的实例,我可以在任务管理器中看到它.

即使我使用close()和关闭Doc app.quit().它应该杀死这个过程.但这个过程并没有被杀死.

任何想法如何以编程方式杀死这个过程.

Ric*_*lay 5

首先,我同意Arthur和Ivo:不要在服务器上使用Word自动化......它不受支持,而且很痛苦.

  1. 如果可以,请尝试通过DOCX格式支持Word输入/输出(完全记录的 XML格式使用.NET Framework支持的压缩打包,并受到带有插件的Office 2007之前的支持)
  2. 如果没有创建一个处理队列中的请求的服务,以防止多个线程同时使用它(ala Ivo的答案)

如果必须使用Word自动化:

  1. 确保设置尽可能多的应用程序选项以防止出现对话框
  2. 确保将WdSaveOptions.wdDoNotSaveChanges传递给Document.Close
  3. 查看本文档:如何:使用Visual Basic .NET解除Office应用程序显示的对话框(显然也适用于C#)
  4. 请确保你调用Marshal.ReleaseComObject的两个文档和应用程序对象,并确保它在finally块.

如果按照上面的说法,winword.exe 应该消失,你不应该杀死进程.

编辑:不是你的问题的答案,但仍然是主题.请记住,您还将在具有权限的服务器上遇到问题.确保为其创建特定用户,并将该用户用作AppPool标识(或服务标识).然后,您需要执行以下操作:

  1. 显然,请确保已安装自动化组件
  2. 运行"dcomcnfg"
  3. 组件服务 - >计算机 - >我的计算机 - > COM +应用程序
  4. "Microsoft Word文档"(或" {000209FF-0000-0000-C000-000000000046}") - >属性
  5. 安全选项卡 - >启动和激活权限 - >自定义
  6. 单击"编辑"并从上面添加AppPool用户
  7. 重复步骤5-6但选择"访问权限"

最重要的是,尽管有上面的对话框选项,您仍然可能需要直接从服务器运行一次winword.exe作为您的AppPool用户,以初始设置配置文件.