在消息服务中添加或删除提供程序

适用于:Outlook 2013 | Outlook 2016

若要在消息服务中添加或删除服务提供程序,请使用 IProviderAdmin : IUnknown 接口。 可以通过调用 IMsgServiceAdmin::AdminProviders 来检索 IProviderAdmin 指针 提供程序表(可通过 IProviderAdmin::GetProviderTable 访问)列出有关消息服务中当前安装的服务提供商的信息。 例如,客户端和服务提供商可以使用提供程序表访问提供程序 DLL 文件的名称、 提供程序的 MAPIUID、显示名称和类型以及有关消息服务的信息。 有关详细信息,请参阅 提供程序表

在消息服务中添加或删除服务提供程序

  1. 调用 AdminServices 方法以访问消息服务管理对象。

  2. 调用 IMsgServiceAdmin::GetMsgServiceTable 访问消息服务表。

  3. 使用 SPropertyRestriction 结构生成属性限制,该结构与 PR_DISPLAY_NAME (PidTagDisplayName) 或 PR_SERVICE_NAME (PidTagServiceName) 要修改的消息服务的名称相匹配。

  4. 调用消息服务表的 IMAPITable::FindRow 方法,以查找表中表示目标消息服务的行。

  5. 调用 IMsgServiceAdmin::AdminProviders 以检索 IProviderAdmin 指针。 将消息服务表行中的 PR_SERVICE_UID (PidTagServiceUid) 列作为 lpUID 参数传递。

  6. 调用 IProviderAdmin::GetProviderTable 以访问提供程序表。

  7. 使用 SPropertyRestriction 结构生成属性限制,该结构与 PR_DISPLAY_NAME (PidTagDisplayName) 或 PR_PROVIDER_DISPLAY (PidTagProviderDisplay) 匹配,以及要添加或删除的服务提供程序的名称。

  8. 调用提供程序表的 IMAPITable::FindRow 方法,以查找表中表示目标服务提供程序的行。

  9. 调用 IProviderAdmin::CreateProvider 添加提供程序或 IProviderAdmin::D eleteProvider 以将其从消息服务中删除。 对于 CreateProvider,将提供程序的 PR_DISPLAY_NAME 属性作为 lpszProvider 参数传递。 对于任一方法,请将提供程序的 PR_SERVICE_UID 属性作为 lpUID 参数传递。 添加或删除服务提供程序后,在创建新会话之前,更改不会明显。

将服务提供程序(特别是消息存储提供程序)添加到配置文件的另一种方法包括构造提供程序的条目标识符。 由于构造条目标识符需要了解其格式,因此仅当服务提供商公开其条目标识符格式时,才能使用此方法。

使用新构造的条目标识符,客户端可以调用 IMAPISession::OpenMsgStore。 MAPI 在服务提供程序的配置文件中自动创建配置文件部分,但不将其添加到消息服务。

某些消息服务不允许这种类型的动态修改;是否受支持由消息服务决定。 另一个可能受支持或可能不受支持的功能是能够直接访问消息服务的专用配置文件部分。 如果你使用的消息服务允许此类访问,它将发布表示 MAPISVC.INF 中专用节的 GUID 。 可以在调用 IProviderAdmin::OpenProfileSection 时传递此 GUID 以访问配置文件部分。