如果Quit()不起作用,则杀死进程

我正在编写一个小程序,它将打开Word,Excel或Powerpoint文件,检查文件而不做任何修改,然后再次退出相应的应用程序。 例如,对于Word,这看起来像下面,并正常的文档工作正常:

s_word.Quit(false); Marshal.ReleaseComObject(s_word); s_word = null; GC.Collect(); GC.WaitForPendingFinalizers(); 

我也有一个计时器应该退出应用程序,如果它没有退出X秒后。 但是,如果出现任何对话框等问题,则会出现问题,例如打开文档时出现密码提示。 我会遇到我的超时但上面的所有命令将不会退出该应用程序。 所以我添加了一个强大的进程kill方法,它只会查找所有的WINWORD进程并杀死它们。 虽然这有效,但我想避免这个问题。 例如,下次打开失败的文档时,Word会询问您是否修复它。

那么,有没有更好的办法强制Office应用程序退出?

我已经创build了一个非常天真的代码片断,它可以让你获得刚刚启动的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)的方法是不可靠的。 有可能有更好的解决scheme来获得这个过程。