У поставщика услуг MAPI, который предоставляет настраиваемый вид папок в Outlook, отлично работает в Outlook 2010. В Outlook 2013 и более поздних версиях не удается открыть папки с ошибкой Не удается развернуть папку. Описание этой ошибки отсутствует.
Однако, если Outlook 2013+ запускается с помощью сценария PowerShell, как показано ниже, папки работают:
Add-type -Assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNameSpace("MAPI")
$folder = $namespace.GetDefaultFolder($olFolders::olFolderInbox)
$folder.Display()
В настоящее время я занимаюсь анализом различий с помощью Process Monitor, Rohitab API Monitor и Windbg, когда Outlook открывается этими способами.
Однако мне интересно знать, знает ли кто-нибудь, что отличается между процессом запуска Outlook при запуске с помощью ярлыка и автоматизацией, которая может повлиять на правильную работу поставщика услуг MAPI.
DLL-характеристики Outlook.exe изменились между Outlook 2010 и Outlook 2013. Outlook 2010 имеет значение 8040, что означает IMAGE_DLLCHARACTERISTICS_ Свойства DYNAMIC_BASE + IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE установлены. Однако Outlook 2013 имеет значение 8160, которое включает те же свойства, что и Outlook 2010, но дополнительно устанавливает IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA+IMAGE_DLLCHARACTERISTICS_ Свойства NX_COMPAT.
Обычно при запуске 64-разрядной версии Outlook 2013 все библиотеки DLL загружаются со случайной базой изображений. Однако в 64-разрядной версии Outlook 2010 многие библиотеки DLL загружаются с базой изображения по умолчанию 0x180000000. При запуске 64-разрядной версии Outlook 2013 через автоматизацию COM многие из этих библиотек DLL загружаются с базой изображения 0x180000000, как Outlook 2010. Однако при запуске с помощью ярлыка они каждый раз загружаются с другой базой изображения. Это можно подтвердить, подключив WinDbg к Outlook.exe и с помощью команды lmv для вывода загруженных модулей или такого инструмента, как Process Explorer и установки Вид -> Показать нижнюю панель на и настроить Вид -> Нижняя панель -> на DLL, а затем добавить столбцы База изображений.
Проверив свойства процесса Outlook.exe с помощью Process Explorer, вы можете увидеть ключевое отличие на вкладке изображения:
Outlook 2010
Статус предотвращения выполнения данных (DEP): включен (постоянно)
Адресное пространство Рандомизация загрузки: снизу вверх
Защита потока управления: отключено
Корпоративный контекст: неприменимо
Outlook 2013
Вы можете использовать инструмент редактирования PE, например CFF Explorer для изменения характеристик DLL исполняемого образа. Однако, удалив некоторые из этих опций, вы увеличите площадь поверхности атаки, которой можно воспользоваться.
Класс olDefaultfolders в пространство имен Microsoft.office.interop.outlook должно указать, что папка вводит olFolderInbox для текущего профиля Microsoft Outlook, кроме того, единственный поддерживаемый тип пространства имен “ MAPI” , метод GetNameSpace функционально эквивалентен свойству Session.
Согласно Вашей проблеме “ can’t разворачивают папку ” и Ваш сценарий, который устранил проблему, кажется, что что-то не так произошло на Вашем типе папки клиентского профиля Outlook, и сценарий, который Вы отправляете, должен указать, что папка вводит и устанавливает сессию папок.
Поскольку подробное описание ошибки недоступно, оно кажется наиболее близким к истине. Кроме того, если проблема все еще возникает, можно попробовать воссоздать профиль Outlook проблемной учетной записи в панели управления , а затем перезапустить клиент, чтобы проверить, существует ли проблема по-прежнему. Надеюсь, это поможет вам. :)