Freigeben über


Beenden einer MAPI-Sitzung

Gilt für: Outlook 2013 | Outlook 2016

Clients können ihre Sitzungen als Reaktion auf die Anforderung eines Benutzers beenden, entweder sofort oder nachdem alle ausgehenden Nachrichten verarbeitet wurden, und wenn ein kritischer Fehler auftritt. Einige Clients müssen angemeldet bleiben, damit ausstehende ausgehende Nachrichten den Transportanbieter und das Zielmessagingsystem erreichen können. Wenn ein solcher Client eine Nachricht sendet und sich sofort abmeldet, bleibt die Nachricht möglicherweise in der ausgehenden Warteschlange, bis sich ein Benutzer wieder anmeldet und so lange angemeldet bleibt, dass die Nachricht übertragen wird.

Wenn Sie Ihre Sitzung mit dem MAPI-Subsystem beenden müssen

  1. Brechen Sie die Registrierungen für alle Benachrichtigungen ab, indem Sie die Unadvise-Methode jedes registrierten Objekts aufrufen.

  2. Geben Sie alle offenen Objekte frei, indem Sie deren IUnknown::Release-Methoden aufrufen. Die Typen von offenen Objekten können Beratungssenken, die status Tabelle, den Ordner Postausgang, einen oder mehrere Nachrichtenspeicher und das Adressbuch umfassen.

  3. Rufen Sie MAPIFreeBuffer auf, um den Speicher für zwischengespeicherte Eintragsbezeichner freizugeben, z. B. PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId).

  4. Rufen Sie IMAPISession::Logoff auf, und legen Sie das MAPI_LOGOFF_UI-Flag fest, wenn Sie eine Benutzeroberfläche zulassen, und das MAPI_LOGOFF_SHARED-Flag, wenn Sie besitzer der aktuellen freigegebenen Sitzung sind. Die Abmeldung benachrichtigt alle anderen Clients, die die aktuelle freigegebene Sitzung verwenden, dass sie sich abmelden sollen, indem eine Fehlerbenachrichtigung gesendet wird.

  5. Lassen Sie den Sitzungszeiger los, indem Sie die IUnknown::Release-Methode der Sitzung aufrufen.

  6. Wenn Sie oleInitialize während des Sitzungsstarts aufgerufen haben, um die OLE-Bibliotheken zu initialisieren, heben Sie die Initialisierung jetzt auf, indem Sie OleUninitialize aufrufen. Nur Clients, die OleInitialize aufgerufen haben, müssen OleUninitialize aufrufen.

  7. Heben Sie die Initialisierung der MAPI-Bibliotheken auf, indem Sie MAPIUninitialize aufrufen. Wenn Sie oleInitialize irgendwann aufgerufen haben, stellen Sie sicher, dass vor diesem Aufruf von MAPIUninitialize ein Aufruf von OleUninitialize erfolgt. Das Timing ist entscheidend. Wenn der Aufruf von OleUninitialize auf den Aufruf von MAPIUninitialize folgt, wird Ihr Client möglicherweise nicht ordnungsgemäß beendet.

  8. Wenn Sie scInitMapiUtil während des Sitzungsstarts aufgerufen haben, um die MAPI-Hilfsprogrammbibliothek zu initialisieren, heben Sie die Initialisierung jetzt auf, indem Sie DeinitMapiUtil aufrufen. Nur Clients, die ScInitMapiUtil aufgerufen haben, müssen DeinitMapiUtil aufrufen.

Hinweis

Alle geöffneten Objekte müssen vor dem Aufruf von IMAPISession::Logoff freigegeben werden. Objekte, die nach dem Aufruf der Abmeldung geöffnet bleiben, werden ungültig. sie können keine Anrufe annehmen und werden möglicherweise nie freigegeben. Wenn ein Aufruf an eines dieser Objekte erfolgt, erwarten Sie, dass der Aufruf fehlschlägt.

MAPI verfügt über keinen Mechanismus zum Löschen von DLLs während des Herunterfahrens der Sitzung. Die DLL eines Dienstanbieters kann nur gelöscht werden, wenn ein Konfigurationsclient wie der Systemsteuerung seine Einstiegspunktfunktion des Nachrichtendiensts mit dem MSG_SERVICE_INSTALL-Ereignis aufruft.