Завершение сеанса MAPI
Область применения: Outlook 2013 | Outlook 2016
Клиенты могут завершать сеансы в ответ на запрос пользователя сразу же или после обработки всех исходящих сообщений, а также при возникновении критической ошибки. Некоторые клиенты должны оставаться в системе входа, чтобы ожидающие исходящие сообщения могли обращаться к поставщику транспорта и целевой системе обмена сообщениями. Если такой клиент отправляет сообщение и немедленно выключается, сообщение может оставаться в очереди исходящих сообщений до тех пор, пока пользователь не войдет в систему и не войдет в систему достаточно долго, чтобы сообщение было передано.
Когда необходимо завершить сеанс с помощью подсистемы MAPI
Отмените регистрацию для всех уведомлений, вызвав метод Unadvise для каждого зарегистрированного объекта.
Освобождение всех открытых объектов путем вызова методов IUnknown::Release . Типы открытых объектов могут включать приемники рекомендаций, таблицу состояния, папку "Исходящие", одно или несколько хранилищ сообщений и адресную книгу.
Вызовите MAPIFreeBuffer , чтобы освободить память для любых кэшированных идентификаторов записи, таких как PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId).
Вызовите IMAPISession::Logoff, установив флаг MAPI_LOGOFF_UI, если вы разрешаете пользовательский интерфейс, и флаг MAPI_LOGOFF_SHARED, если у вас есть текущий общий сеанс. При выходе из системы все другие клиенты, использующие текущий общий сеанс, уведомляют о том, что они должны выйти из системы, отправляя уведомление об ошибке.
Отпустите указатель сеанса, вызвав метод IUnknown::Release сеанса.
Если вы вызвали OleInitialize во время запуска сеанса для инициализации библиотек OLE, не инициализируйте их, вызвав OleUninitialize. Только клиенты, которые вызвали OleInitialize , должны вызывать OleUninitialize.
Неинициализируйте библиотеки MAPI, вызвав MAPIUninitialize. Если в какой-то момент вы вызвали OleInitialize, убедитесь, что перед этим вызовом MAPIUninitialize происходит вызов OleUninitialize. Время имеет решающее значение. Если вызов OleUninitialize следует за вызовом MAPIUninitialize, ваш клиент может завершить работу неграмотно.
Если вы вызвали ScInitMapiUtil во время запуска сеанса, чтобы инициализировать служебную библиотеку MAPI, не инициализировать ее, вызвав DeinitMapiUtil. Только клиенты, которые вызвали ScInitMapiUtil , должны вызывать DeinitMapiUtil.
Примечание.
Все открытые объекты должны быть освобождены перед вызовом IMAPISession::Logoff. Объекты, которые остаются открытыми после вызова выхода , становятся недопустимыми; они не могут принимать никаких вызовов и никогда не могут быть освобождены. Если выполняется вызов к одному из этих объектов, ожидается, что вызов завершится ошибкой.
MAPI не имеет механизма удаления библиотек DLL во время завершения сеанса. Библиотека DLL поставщика услуг может быть удалена только в том случае, если клиент конфигурации, например панель управления, вызывает функцию точки входа службы сообщений с событием MSG_SERVICE_INSTALL.