代码之家  ›  专栏  ›  技术社区  ›  rjzii

使用办公自动化时检查悬挂式办公流程

  •  3
  • rjzii  · 技术社区  · 16 年前

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   bruceatk    16 年前

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

    作为服务运行会使清理变得困难。例如,使用作为服务运行的内容,可以在杀死挂起的单词或Excel之后存活下来。你有可能不得不终止服务。如果Word或Excel处于此状态,您的服务是否将停止?

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

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

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

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

    • taskkill/f/im excel.exe-终止excel.exe的所有实例

        2
  •  1
  •   RobertTheGrey    16 年前

    我记得几年前做过这个-所以我说的是OfficeXP或2003天,而不是2007天。

    显然,目前自动化的一个更好的解决方案是使用新的XML格式,该格式使用system.io.packaging名称空间描述docx等。

    那时候,我经常注意到,每当MSWord踢了一脚,吃饱了,机器上就会运行一个名为“沃森博士”的进程。这是我第一次发现这个词被绊倒了。有时我会看到不止一个 WEWORD.EXE 但是我的代码只是用来扫描好医生。一旦我(在代码中)看到这一点,我就杀了所有人 WEWORD.EXE 亲自处理好医生,重新开始折磨文字的过程:—)

    希望能给你一些线索,告诉你要找什么。

    最好的,

    罗布G

    另外,如果你不来的话,我甚至可以在我的档案中找出代码!

        3
  •  0
  •   Ed Schwehm    16 年前

    我可以回答后半个问题;如果您在代码中引用了应用程序对象,您可以简单地对其调用“quit”:

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

    为了检查挂起的进程,我想您应该尝试从应用程序中获取一些数据,并查看是否在合理的时间范围内获得结果(签入计时器或其他线程或其他内容)。不过,也许还有更好的办法。