0

我有一个创建 MAPI 配置文件以发送邮件/消息的应用程序。配置文件在 Outlook2007 环境中正确创建,但在 Outlook2007 SP2 环境中未正确创建。源代码和“MAPI/outlook 配置文件的交换环境”都相同。该配置文件是使用 MAPI 子系统创建的。

关于应用程序的描述: 该应用程序是一个基于 Windows 服务的应用程序。该服务执行 COM 应用程序。COM 应用程序产生一个新线程来创建一个新的配置文件并发送一个示例消息。

实际问题:在配置文件创建期间,即使返回 S_OK,对 ConfigureMsgService 函数(属于 IMsgServiceAdmin)的调用也无法正常工作。ConfigureMsgService 函数的第 5 个参数“lpProps”的值如下所示。

    // First, the mailbox name.
    ZeroMemory(&rgval[0], sizeof(SPropValue) );
    rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME; 
    rgval[0].Value.lpszA = szMailbox;

    // Next, the server name.
    ZeroMemory(&rgval[1], sizeof(SPropValue) );
    rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
    rgval[1].Value.lpszA = szServer;

    // For NT Services, need to do this to keep MAPI from
    // displaying dialog boxes.
    ZeroMemory(&rgval[2], sizeof(SPropValue) );
    rgval[2].ulPropTag = PR_CONVERSION_PROHIBITED;  //As the com application is executed by the NT service, this parameter is specified.
    rgval[2].Value.b = TRUE;

另请注意,在调用 ConfigureMsgService 函数之前,所有其他 MAPI 调用(如 MAPIInitialize、MAPIAdminProfiles、CreateProfile、AdminServices、CreateMsgService、GetMsgServiceTable 等)均已成功。

我的问题,相同的代码在 Outlook 2007 环境中正常工作,但在 Outlook 2007 SP2 环境中失败。

请注意,1. 当从独立应用程序执行相同的代码时,它运行良好。2. 如果服务作为本地系统帐户或网络服务帐户执行,则代码无法正常工作。

  1. 可能是什么问题呢?我是不是错过了什么。
  2. 是否有任何解决方法可用?

提前感谢萨拉瓦南

4

2 回答 2

0

感谢您的回复。

我试过你的想法,但没有奏效。在这种情况下,我与 Microsoft 进行了交谈,他们已经为这个问题提供了修复 (http://support.microsoft.com/kb/972363),它修复了它。

沙拉瓦南

于 2011-01-04T12:17:02.277 回答
0

你的问题在你的笔记#2中:

请注意,1. 当从独立应用程序执行相同的代码时,它运行良好。2. 如果服务作为本地系统帐户或网络服务帐户执行,则代码无法正常工作。

MAPI 配置文件存储在注册表中当前用户的配置单元* 中(HKEY_CURRENT_USER 和 HKEY_USERS{user SID})。系统帐户(LocalSystem 和 NetworkService)不提供 MAPI 需要写入配置文件信息的用户配置单元。

最简单的解决方法是让您的服务在已被授予“作为服务登录”权限的用户帐户下运行。根据您的 COM 应用程序的运行方式(在 proc 中与在 proc 外),您可以让它作为特定用户而不是系统帐户运行。

*Hive 是用于注册表不同部分的术语。在这里,我们只处理用户自己的注册表部分。

于 2010-12-31T02:34:12.030 回答