我正在使用ASP.NET / C#程序中的Microsoft Word文档。
我的程序在内部打开word文档。使用
app = new Word.Application();
app.Documents.Open
它创建了一个winword.exe进程的实例,我可以在任务管理器中看到它。
即使我使用close()
和app.quit()
关闭了文档。它应该杀死这个过程。但这个过程并没有被杀死。
任何想法如何以编程方式杀死此进程。
答案 0 :(得分:5)
首先,我同意Arthur和Ivo:不要在服务器上使用Word自动化......它不受支持,而且很痛苦。
如果必须使用Word自动化:
如果你按照上面的说法,winword.exe 应该消失,你不需要杀死这个过程。
编辑:不是您问题的答案,但仍然是主题。请记住,您还将在具有权限的服务器上遇到问题。确保为其创建特定用户,并将该用户用作AppPool标识(或服务标识)。然后,您需要执行以下操作:
{000209FF-0000-0000-C000-000000000046}
”) - >特性除此之外,您仍然可能需要直接从服务器运行winword.exe一次作为您的AppPool用户,尽管有上面的对话框选项,以便最初设置配置文件。
答案 1 :(得分:2)
Office应用程序不会“销毁”创建的第一个实例。使用excel时会发现同样的问题。
见这个和其他人
答案 2 :(得分:2)
查看System.Diagnostics.Process.GetProcessesByName和System.Diagnostics.Process.Kill
尝试类似
的内容string processName = "ProcessName";
Process[] processes = Process.GetProcessesByName(processName);
foreach(Process process in processes)
{
process.Kill();
}
答案 3 :(得分:1)
你应该能够抓住每个单词的过程并杀死它:
foreach(Process p in System.Diagnostics.Process.GetProcessesByName("winword"))
{
p.kill();
p.WaitForExit();
}
您还应该尝试将文档对象视为null吗?
答案 4 :(得分:1)
在服务器上使用(Microsoft)Office的最安全方法是创建一个可以接受流并创建Word(或任何其他Office应用程序)实例的服务,然后杀死应用程序。 如果您不这样做,对运行的办公室应用程序的引用将保留在您的asp工作进程中。这意味着很多进程将继续运行,直到您的asp工作进程被回收。这是一个很大的潜在内存泄漏。
这就是我们这样做的方式。花费大量时间来正确构建,但这是最安全的方式。
答案 5 :(得分:0)
这让我发疯,直到我在这个网站上找到this post。该页面上的第二个解决方案对我有用 - 第一个看起来更简单,但实际上很难跟踪你所引用的所有隐藏的COM对象。第二种方法始终有效 - 您不必跟踪每个对象。
答案 6 :(得分:0)
简单地说:Office应用程序不应该在服务器上运行。它们也不应该用于服务或WebApplication。
是的 - 我们还有一些要求迫使我们在服务器上使用Office产品。而且我们总是遇到麻烦。
如果有机会不使用Office(处理WordML,新的Office XML格式),那么就这样做。