PowerPoint自动化-在某些计算机上,无法从受保护的视图窗口中打开演示文稿,并显示E_FAIL(0x80004005)

时间:2018-11-03 15:10:59

标签: vsto powerpoint powerpoint-vba powerpoint-automation

我在某些计算机上发生了一个问题(似乎是那些运行Office 365 1809版的计算机),但是我在其他计算机上运行了相同版本的365,并且使用完全相同的代码也可以。

>

我需要以编程方式打开受密码保护的PowerPoint演示文稿。就其本身而言,与其他Office产品相比,仅打开受密码保护的PowerPoint演示文稿似乎更具挑战性,但经过一些试验和谷歌搜索问题之后,似乎可以使用此代码:

Dim ppt
MsgBox "booting ppt"
Set ppt = CreateObject("powerpoint.application")
ppt.Visible = True
Dim pvw
MsgBox "loading pvw"
Set pvw = ppt.ProtectedViewWindows.Open("C:\Files\pres.pptx", "password")
If pvw Is Nothing Then MsgBox "no pvw" Else MsgBox "got pvw"
pvw.Activate
Set pvw = Nothing
Set ppt = Nothing
MsgBox "end"

是的,我知道,代码很讨厌,但是让VSTO参与进来或使用更强类型的代码也无济于事,我只是想出了尽可能简单的代码,将“运动部件”的数量减少到最少复制问题。我已经放入MsgBox调用,以便可以看到失败的地方。

当我使用VSTO尝试等效时,出现以下错误:

    System.Runtime.InteropServices.COMException (0x80004005): Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))
   at Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)

我试图通过将上述代码作为VBA放入.vbs脚本并运行它来排除COM互操作,但这也失败了:

Error: Unspecified error
Code: 80004005

最后,我尝试通过宏直接在PowerPoint本身中直接运行此命令,但这也失败,并显示以下错误:

Method 'Open' of object 'ProtectedViewWindows' failed

我根本无法在受影响的计算机上使用它-要重现它,只需创建并保存pptx格式的受密码保护的PowerPoint演示文稿,然后在上面的代码中适当地修改路径和密码,然后如果有时间,可以作为宏或vbs运行,也可以通过VSTO运行。

我尝试了很多事情:

  • 检查NTFS文件权限-一切正常。
  • 检查区域标识符和阻止Internet下载的文件-不是本地创建的问题,但是值得一试-没什么不同。
  • 在PowerPoint选项中的“信任中心”中切换无数选项-不用高兴。
  • 允许在PowerPoint中以编程方式访问VBA对象模型和相关设置-不用高兴。
  • 禁用所有加载项-没有区别。
  • 尝试运行PowerPoint,VBScript解释器,使用VSTO来执行相同操作的示例.NET应用程序-不能修复它。
  • DEP似乎无关紧要-它可以在运行的计算机上启用,就像在发生故障的计算机上一样。
  • 发生故障的计算机没有任何防病毒软件正在运行,它是一台干净的计算机,几乎没有安装任何其他软件。
  • 确保PowerPoint的“旧”副本仍在任务管理器中运行。
  • 以管理员权限运行它。

此计算机已经在32位和64位版本的Office 365(当前在32位Office 365上)之间反弹,它是64位Windows 7系统。

我什至尝试通过SysInternals的Process Monitor对其进行监视,但是似乎什么也没发生,冲走了消息框和受保护的打开事件之间记录的数十万种东西。

我看到PowerPoint 可以读取文件,因为受保护的视图窗口会短暂闪烁,并提及相关文件。如果我故意拼写错误的文件名(以查看文件名是否试图打开它),则会收到另一个错误。如果我故意拼写错误的密码,还会收到另一个错误,这确实意味着PowerPoint可以访问和读取/解密文件。显然,我试图在PowerPoint中手动打开文件并手动输入密码,效果很好。

感觉真的像是PowerPoint本身内部有一些深层的断裂-好像它可以打开,解密和读取文件一样,一旦“获得”该文件,它就要进行最后的一系列测试,然后进行一次这些失败了,但是它只给出了通用且无用的错误E_FAIL(0x80004005)。

关于计算机本身,没有什么“特殊的”东西,它不是域/ AD的一部分,没有开发人员工具,也没有人在“玩”注册表权限或类似的事情。

我完全不知道它为什么失败-进行Office安装“修复”似乎没有什么区别,也没有对Office进行完全卸载/重新安装。我没有尝试从头开始重新加载操作系统,但这并不是真正的选择,这种配置很可能在“荒野”中遇到,所以我宁愿找到根本原因。

有什么想法吗?

谢谢, 尼克。

0 个答案:

没有答案