资源管理器预览导致System.Runtime.InteropServices.COMException:未授予自动化权

本文关键字:自动化 COMException InteropServices Runtime System 资源管理器 | 更新日期: 2023-09-27 17:58:40

public static PowerPoint.Presentation GetActivePPT(this PowerPoint.Application application)
{   
            try
            {
                if (App.Presentations.Count > 0)
                {
                    return application.ActivePresentation;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                return null;
            }
}

我这样称呼这个函数:

PowerPoint.Presentation ppPresentation = PowerPointApplication.GetActivePPT();
if(ppPresentation != null)
{
   Console.WriteLine(ppPresentation.Name);
}

我得到了一个:

COMException:消息:演示文稿(未知成员(:请求无效。未授予自动化权限。StackTrace:位于Microsoft.Office.Interop.PowerPoint_Presentation.get_Name((

这是我所知道的演示文稿。计数是一和应用程序。ActivePresentation不是空

看起来我不是唯一一个遇到这个问题的浏览器预览:

  • https://social.msdn.microsoft.com/Forums/vstudio/en-US/327cfc7b-07a3-49ad-9e0b-f7100852e3bf/applicationpresentationsopen-generating-exception-error-code-2147467259-automation-rights-are?forum=vsto
  • https://social.msdn.microsoft.com/Forums/en-US/e7437e44-1aea-4ab5-bbf2-6794037c872a/vsto-powerpoint-explorer-previewpane?forum=vsto
  • http://youpresent.co.uk/presentations-count-returns-wrong-number/
  • https://github.com/jon-hedgerows/msofficesvn/issues/25
  • https://groups.google.com/forum/#!topic/microsoft.public.powerpoint/KR1VuXtccQ

这听起来像是权限问题?希望它像设置COMVisible(true(一样简单,但在这一点上没有好的想法。

这篇博客文章似乎声称写锁定正在发挥作用,但Word和Excel并没有表现出相同的行为。

资源管理器预览导致System.Runtime.InteropServices.COMException:未授予自动化权

当您在启用预览窗格的Windows资源管理器中选择演示文稿时,Windows资源管理程序将在隐藏窗口中打开该演示文稿。如果您试图从COM加载项访问任何隐藏演示文稿的对象成员(例如ppPresentation.Name(,则会出现"未授予自动化权限"异常。

不幸的是,似乎没有一个好的方法来确定隐藏的演示文稿是否由Windows资源管理器(例如ppPresentation.Windows.Count = 0(打开,因为通过代码访问演示文稿的任何对象成员似乎都会引发此异常。因此,唯一的解决方法似乎是错误处理,如Try/Catch

请注意,Presentations.Count返回所有打开的演示文稿的数量,包括预览窗格打开的演示,因此,如果外接程序依赖于它实际可以使用的演示文稿数量的准确计数,则需要对此进行说明。

此外,请注意,这个问题似乎不会以同样的方式影响Excel。