Поделиться через


Регистрация служб и поставщиков услуг в MapiSvc.inf

Область применения: Outlook 2013 | Outlook 2016

Для установки нового поставщика в системе необходимо обновить файл MapiSvc.inf, чтобы он указывал на нового поставщика. Стандартные свойства, заданные во время настройки, в том числе следующие, сообщают MAPI, где найти библиотеку динамической компоновки поставщика (.dll):

  • PR_SERVICE_DLL_NAME указывается в разделе [Служба сообщений].

  • PR_PROVIDER_DLL_NAME указывается в разделе [Поставщик услуг].

Примечание.

Ожидается, что вы задаете имя .dll поставщика (без суффикса "32"). Затем MAPI загружает поставщика, ища его по пути.

Добавление пути в MapiSvc.inf

Большинство приложений устанавливаются в разделе Program Files, требуя обновления переменной path, чтобы разрешить работу поставщиков MAPI. С несколькими ограничениями, Microsoft Outlook 2010, русская версия и Outlook 2013 могут вместить полные пути к поставщикам MAPI.

При регистрации поставщика в MapiSvc.inf можно поместить полный путь к поставщику в свойствах MAPI PR_SERVICE_DLL_NAME и PR_PROVIDER_DLL_NAME.

В любом из свойств полный путь должен быть без суффикса "32", так как MAPI продолжает добавлять его в имя файла, прежде чем искать файл. Это означает, что если зарегистрировать путь "c:\mypath\myprovider.dll", MAPI попытается загрузить "c:\mypath\myprovider32.dll".

Так как MAPI Outlook изначально не был разработан для размещения полных путей, он выполняет вставку суффикса "32" путем поиска первой точки в строке, что означает, что пути, содержащие другие точки, не могут работать, поэтому нельзя использовать пути, такие как "c:\my.path\myprovider.dll" или "c:\mypath\my.provider.dll".

Иногда в поставщике хранилища вы создаете идентификаторы входа с помощью функции WrapStoreEntryID , которая принимает в качестве параметра имя поставщика.

Важно!

Если вы используете полные пути в MapiSvc.inf, необходимо использовать тот же путь во всех вызовах WrapStoreEntryID.

Кроме того, используемый путь может быть преобразован в Юникод и из нее с помощью кодовой страницы, предоставленной функцией GetACP .

Предостережение

Если вы выберете путь, содержащий символы, которые не могут выжить при таком цикле с помощью функций MultiByteToWideChar и WideCharToMultiByte , произойдет сбой.

Чтобы проиллюстрировать эту функцию, был изменен пример упакованный PST на сайте GitHub. Соответствующая функциональность доступна в mergeWithMapiSvc и GenerateProviderPath.