使用Office Automation时检查挂起的Office进程

时间:2008-08-13 14:42:53

标签: language-agnostic ms-office office-automation

使用Office Automation时是否有办法检查Microsoft Office进程(即Word,Excel)是否已挂起?另外,如果进程挂起,有没有办法终止它?

3 个答案:

答案 0 :(得分:2)

让我首先说我不建议在服务器上的服务中执行此操作,但我会尽力回答问题。

作为服务运行会使清理变得困难。例如,你作为一项服务运行的东西可以在杀死一个挂起的单词或excel时幸存下来。您可能无法杀死该服务。如果word或excel处于此状态,您的服务是否会停止。

尝试测试它是否挂起的一个问题是,您的测试可能导致新的单词实例启动和工作,而服务运行的那个仍然会挂起。

确定它是否挂起的最好方法是让它做它应该做的事情并检查结果。我需要更多地了解它实际上在做什么。

以下是一些在批处理文件中用于清理的命令(两者都应该在路径中):

  • sc stop servicename - 停止名为servicename的服务
  • sc start servicename - 启动名为servicename的服务
  • sc query servicename - 查询servicename的状态

  • taskkill / F / IM excel.exe - 终止excel.exe的所有实例

答案 1 :(得分:1)

我记得几年前这样做 - 所以我说的是Office XP或2003天,而不是2007年。

显然,现在更好的自动化解决方案是使用描述docx等的新XML格式,使用System.IO.Packaging命名空间。

当时,我曾经注意到,每当MSWord踢完水桶并且已经受够了,一台名为“Dr。Watson”的过程就会在机器上运行。这是我第一次发现Word已经绊倒和摔倒的线索。有时我可能会看到多个 WINWORD.EXE ,但我的代码只是用来扫描好医生。一旦我看到(在代码中),我杀了所有 WINWORD.EXE 处理好医生本人,并重新开始折磨Word的过程: - )

希望能为您提供有关寻找内容的线索。

一切顺利,

Rob G

P.S。如果你不对,我甚至可以在我的档案中挖出代码!

答案 2 :(得分:0)

我可以回答后半部分;如果您在代码中引用了应用程序对象,则只需在其上调用“Quit”:

private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();

为了检查挂起的进程,我猜你想要尝试从应用程序中获取一些数据,看看你是否在合理的时间范围内得到了结果(检查计时器或其他线程或其他东西)。可能有更好的方法。