【问题标题】:Check for hung Office process when using Office Automation使用 Office 自动化时检查挂起的 Office 进程
【发布时间】:2008-08-13 14:42:52
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    首先让我说我不建议在服务器上的服务中这样做,但我会尽力回答问题。

    作为服务运行使清理变得困难。例如,您作为服务运行的内容可以杀死一个悬而未决的单词或 excel。您可能不得不终止服务。如果 word 或 excel 处于这种状态,您的服务会停止吗?

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

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

    这里有一些用于清理批处理文件的命令(都应该在路径中):

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

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

    【讨论】:

      【解决方案2】:

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

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

      那时,我曾经注意到,每当 MSWord 踢桶并受够了,机器上就会运行一个名为“Dr. Watson”的进程。这是我第一个知道 Word 绊倒的线索。有时我可能会看到多个WINWORD.EXE,但我的代码只是用来扫描好医生。一旦我看到(在代码中),我自己杀死了所有 WINWORD.EXE 进程,并重新启动了折磨 Word 的进程:-)

      希望能给你一些关于寻找什么的线索。

      一切顺利,

      罗伯克

      附:如果你不正确,我什至可以挖掘出我档案中的代码!

      【讨论】:

        【解决方案3】:

        我可以回答后半部分;如果您的代码中有对应用程序对象的引用,您可以简单地对其调用“退出”:

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

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

        【讨论】:

          猜你喜欢
          • 2016-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-21
          • 1970-01-01
          相关资源
          最近更新 更多