C# 关闭powerpoint演示文稿

C# 关闭powerpoint演示文稿,c#,office-interop,powerpoint-2010,C#,Office Interop,Powerpoint 2010,我创建了一些Office外接程序,在其中跟踪文档/演示文稿是否已关闭,然后在关闭文档/演示文稿之前执行一些自定义代码 所有这些代码在Word加载项中都可以正常工作,但在PowerPoint加载项中我得到了一个 “System.Runtime.InteropServices.COMException(0x80048240): 演示文稿(未知成员):请求无效。此操作无效 无法在此事件处理程序中执行。“-关闭 PowerPoint应用程序关闭。正在调用的方法是 presentation.Close()

我创建了一些Office外接程序,在其中跟踪文档/演示文稿是否已关闭,然后在关闭文档/演示文稿之前执行一些自定义代码

所有这些代码在Word加载项中都可以正常工作,但在PowerPoint加载项中我得到了一个

“System.Runtime.InteropServices.COMException(0x80048240): 演示文稿(未知成员):请求无效。此操作无效 无法在此事件处理程序中执行。“-关闭 PowerPoint应用程序关闭。正在调用的方法是 presentation.Close()

如果该方法作为Ribbon eventhandler的一部分调用,则该方法可以正常工作,但如果它被任何应用程序调用(
PresentationClose
PresentationBeforeClose
PresentationCloseFinal
),则该方法无法执行
presentation.Close()

如前所述,我在Word加载项中有相同的代码,但没有此问题。我知道这两种产品中的事件处理是不同的,但我仍然不明白为什么在PowerPoint中关闭应用程序或演示文稿时会出现问题


希望有人能提供一些好的意见。

我遇到了一些非常相似的东西;为了绕过PPT中的一些错误或其他错误,我需要关闭然后重新打开当前演示文稿,但无法从事件处理程序中关闭演示文稿(我认为这是有意义的,因为它仍在处理属于触发它的演示文稿的事件)

我通过让事件处理程序无模式地加载表单来解决这个问题。这允许事件处理程序中的代码继续到事件处理程序的End Sub,因此您不再在事件处理程序中

表单中的初始化代码随后关闭当前文档并卸载表单


无需显示表单,因此用户从未看到过这些内容。

我尝试了很多方法,但都没有效果。 因此,最好搜索powerpoint流程并通过代码终止它。 希望这就是你想要的

Process[] pros = Process.GetProcesses();
  for (int i = 0; i < pros.Count(); i++)
   {
   if (pros[i].ProcessName.ToLower().Contains("powerpnt"))
        {
          pros[i].Kill();
        }
   }
Process[]pros=Process.getprocesss();
for(int i=0;i
您找到解决此问题的方法了吗?