c# - 如果 Quit() 不起作用,则终止进程

标签 c# excel ms-word powerpoint office-interop

我正在编写一个小程序,它将打开 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/

相关文章:

c# - 如何在应用程序运行时更改图片框的大小

excel - Evaluate() 函数返回错误 2023,但没有错误

Excel公式获取2个字符之间的字符串

c# - 将许多 excel 图表作为链接粘贴到 Word

vbscript - 通过 VBA 以编程方式配置 Office 2010 Word 功能区

c# - 数据库错误 : There is no row at position 0

c# - 使用 toString 进行格式化,以便我得到某种图表

c# - 如何通过键从 .NET IGrouping 返回值?

excel - 使用 Matlab 忽略比例将 Excel 文件转换为 PDF

ms-word - WinDbg:如何从核心转储中获取在 Word 对话框中显示的消息?