我正在编写一个小程序,它将打开 Word、Excel 或 Powerpoint 文件,检查文件而不进行任何修改,然后再次退出相应的应用程序。例如。对于 Word,这看起来如下并且对于普通文档工作正常:
s_word.Quit(false);
Marshal.ReleaseComObject(s_word);
s_word = null;
GC.Collect();
GC.WaitForPendingFinalizers();
我还有一个计时器,如果应用程序在 x 秒后没有退出,它应该退出应用程序。但是,如果弹出任何对话框等,我就会遇到问题。打开文档时提示密码。我将遇到超时,但上面的所有命令都不会退出应用程序。 所以我添加了一个硬进程终止方法,它将简单地查找所有 WINWORD 进程并终止它们。虽然这有效,但我想避免一些陷阱。例如,下次您打开失败的文档时,Word会询问您是否修复它等。
那么,有没有更好的方法来强制 Office 应用程序退出呢?
最佳答案
我创建了一个极其简单的代码片段,它应该允许您获取刚刚启动的 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的方法理论上是不可靠的。可能有更好的解决方案来获取流程。
关于c# - 如果 Quit() 不起作用,则终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856925/