我正在编写一个小程序,它将打开Word,Excel或Powerpoint文件,检查文件而不进行任何修改,然后再次退出相应的应用程序。例如。对于Word,这看起来像下面,适用于普通文档:
s_word.Quit(false);
Marshal.ReleaseComObject(s_word);
s_word = null;
GC.Collect();
GC.WaitForPendingFinalizers();
我还有一个计时器,如果在x秒后没有退出,它应该退出应用程序。但是,如果弹出任何对话框等,我会遇到问题。打开文档时出现密码提示。我将遇到我的超时,但上面的所有命令都不会退出应用程序。 所以我添加了一个硬进程kill方法,它只是查找所有WINWORD进程并杀死它们。虽然这有效,但我还是有一些陷阱要避免。例如,下次打开失败的文档时,Word将询问您是否修复它。
那么,有没有更好的方法来强制Office应用程序退出?
答案 0 :(得分:2)
我创建了一个非常天真的代码段,它应该允许您获取刚刚启动的Office程序实例的进程,但会保持其他人不受影响。然后,您可以调用processInstance.Kill()来结束它。
Process[] oldRunningWordInstances = Process.GetProcessesByName("Microsoft Word");
Word.Application application = new Word.Application();
Process[] newRunningWordInstances = Process.GetProcessesByName("Microsoft Word");
Process applicationProcess = null;
foreach (Process p in newRunningWordInstances)
if (!oldRunningWordInstances.Contains(p))
{
applicationProcess = p;
break;
}
applicationProcess.Kill();
这种获取过程(id)的方法在理论上是不可靠的。可能有更好的解决方案来获得这个过程。