使用 Office Automation 时检查挂起的 Office 进程
-
08-06-2019 - |
题
有没有办法检查 Microsoft Office 进程(即使用 Office Automation 时 Word、Excel) 挂起?另外,如果进程挂起,有没有办法终止它?
解决方案
首先我要说的是,我不建议在服务器上的服务中执行此操作,但我会尽力回答这些问题。
作为服务运行使得清理变得困难。例如,您作为服务运行的内容可以杀死挂起的单词或 Excel。您可能不得不终止该服务。如果word或excel处于这种状态,你的服务会停止吗?
尝试测试它是否挂起的一个问题是,您的测试可能会导致一个新的 word 实例启动并工作,而该服务正在运行的实例仍然会挂起。
确定它是否挂起的最佳方法是要求它执行应该执行的操作并检查结果。我需要更多地了解它实际上在做什么。
以下是在批处理文件中用于清理的一些命令(两者都应位于路径中):
- sc stop servicename - 停止名为 servicename 的服务
- sc start servicename - 启动名为servicename的服务
sc query servicename - 查询servicename的状态
taskkill /F /IM excel.exe - 终止 excel.exe 的所有实例
其他提示
我记得几年前这样做过 - 所以我说的是 Office XP 或 2003 天,而不是 2007 年。
显然,现在更好的自动化解决方案是使用新的 XML 格式,该格式使用 System.IO.Packaging 命名空间来描述 docx 等。
那时,我常常注意到,每当 MSWord 寿终正寝并受够了时,就会有一个名为“Dr. Word”的过程。Watson”正在机器上运行。这是我发现 Word 绊倒并摔倒的第一个线索。有时我可能会看到不止一个 WINWORD程序, ,但我的代码只是用来扫描好医生。一旦我看到这个(在代码中),我就把所有的都杀了 WINWORD程序 处理好博士本人,并重新开始折磨Word的过程:-)
希望这能为您提供一些关于要寻找什么的线索。
一切顺利,
罗布·G
附:如果你不来的话,我什至可以在我的档案中挖出代码!
后半部分我可以回答;如果您在代码中引用了应用程序对象,则可以简单地对其调用“Quit”:
private Microsoft.Office.Interop.Excel.Application _excel;
// ... do some stuff ...
_excel.Quit();
为了检查挂起的进程,我猜您想尝试从应用程序获取一些数据,并查看是否在合理的时间范围内获得结果(检查计时器或其他线程或其他东西)。不过可能有更好的方法。