Автоматизация PowerPoint. На некоторых компьютерах открытие презентации из окна защищенного просмотра завершается неудачно с помощью E_FAIL (0x80004005)

У меня есть проблема, которая возникает на определенных машинах (кажется, те, на которых установлена ​​версия Office 365 1809), но у меня на других машинах работает та же версия 365, и они работают с точно таким же кодом.

Мне нужно программно открыть презентацию PowerPoint, защищенную паролем. Само по себе простое открытие защищенной паролем презентации PowerPoint кажется более сложным, по сравнению с другими продуктами Office, но после некоторого эксперимента и поиска решения этой проблемы, похоже, этот код поможет:

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)

Я попытался исключить COM-взаимодействие, просто поместив приведенный выше код как VBA в скрипт.vbs и запустив его, но это также не удается:

Error: Unspecified error
Code: 80004005

Наконец, я попытался просто запустить это непосредственно из самой PowerPoint через макрос, но это также не удается из-за следующей ошибки:

Method 'Open' of object 'ProtectedViewWindows' failed

Я просто не могу заставить это работать на уязвимом компьютере - воспроизвести его, просто создать и сохранить защищенную паролем презентацию PowerPoint в формате pptx, а также соответствующим образом изменить путь и пароль в приведенном выше коде, а затем запустить как Макрос, или VBS, или через VSTO, если у вас есть время на ваших руках.

Я перепробовал много вещей:

  • Проверка прав доступа к файлу NTFS - все хорошо.
  • Проверка идентификатора зоны и блокировка загруженных из Интернета файлов - не проблема, созданная локально, но заслуживающая внимания, - не имеет значения.
  • Переключение множества опций в "Центре доверия" в опциях PowerPoint - не радость.
  • Предоставление программного доступа к объектной модели VBA и соответствующим настройкам в PowerPoint - не радует.
  • Отключение всех надстроек - без разницы.
  • Попытка запустить PowerPoint, интерпретатор VBScript, пример приложения.NET, использующего VSTO, чтобы сделать то же самое - не исправляет это.
  • DEP, похоже, не имеет значения - он включен на машинах, которые работают, как и на сбойной машине.
  • На сбойном компьютере не запущено антивирусное программное обеспечение, и это чистый компьютер, на котором почти ничего не установлено.
  • Убедитесь, что в диспетчере задач все еще не запущены "старые" копии PowerPoint.
  • Запуск этого с правами администратора.

Этот компьютер был переброшен между 32- и 64-разрядной версиями Office 365 (в настоящее время используется 32-разрядная версия Office 365), это 64-разрядная система Windows 7.

Я даже пытался контролировать его с помощью Process Monitor SysInternals, но ничего не предвидится, заполонив сотни тысяч вещей, которые регистрируются между окном сообщения и защищенным событием open.

Я вижу, что PowerPoint может читать файл, так как окно защищенного вида кратковременно вспыхивает, упоминая соответствующий файл. Если я намеренно неправильно пишу имя файла (чтобы увидеть, пытается ли он его открыть), я получаю другую ошибку. Если я намеренно неправильно ввел пароль, я также получаю другую ошибку, которая подразумевает, что PowerPoint может получить доступ и прочитать / расшифровать файл. Очевидно, я пытался открыть файл вручную в PowerPoint и вручную ввести пароль, и это работает отлично.

Такое ощущение, что внутри самой PowerPoint что-то сломано - почти как будто он может открывать, расшифровывать и читать файл, и, как только он "получил" файл, он проходит финальную серию тестов, и один из них сбой, но он просто дает общую и бесполезную ошибку E_FAIL (0x80004005).

В самой машине нет ничего "особенного", она не является частью домена /AD, на ней нет инструментов разработчика, и никто не "играл" с разрешениями реестра или чем-то подобным.

Я совершенно не понимаю, почему это не удается - выполнение "ремонта" установки в офисе, похоже, не имеет значения, равно как и полное удаление / переустановка Office. Я не пытался перезагрузить ОС с нуля, но на самом деле это не вариант, такая конфигурация, скорее всего, встречается где-то в "диком" состоянии, поэтому я бы лучше нашел основную причину.

Есть идеи?

Спасибо, Ник.

0 ответов

Другие вопросы по тегам