资源管理器预览导致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并没有表现出相同的行为。
当您在启用预览窗格的Windows资源管理器中选择演示文稿时,Windows资源管理程序将在隐藏窗口中打开该演示文稿。如果您试图从COM加载项访问任何隐藏演示文稿的对象成员(例如ppPresentation.Name
(,则会出现"未授予自动化权限"异常。
不幸的是,似乎没有一个好的方法来确定隐藏的演示文稿是否由Windows资源管理器(例如ppPresentation.Windows.Count = 0
(打开,因为通过代码访问演示文稿的任何对象成员似乎都会引发此异常。因此,唯一的解决方法似乎是错误处理,如Try/Catch
。
请注意,Presentations.Count
返回所有打开的演示文稿的数量,包括预览窗格打开的演示,因此,如果外接程序依赖于它实际可以使用的演示文稿数量的准确计数,则需要对此进行说明。
此外,请注意,这个问题似乎不会以同样的方式影响Excel。