Com 我的应用程序无法使用MAPI子系统正确创建MAPI/消息传递配置文件

Com 我的应用程序无法使用MAPI子系统正确创建MAPI/消息传递配置文件,com,outlook,exchange-server,outlook-2007,mapi,Com,Outlook,Exchange Server,Outlook 2007,Mapi,我有一个应用程序,可以创建MAPI配置文件来发送邮件/消息。配置文件在Outlook2007环境中正确创建,但在Outlook2007 SP2环境中未正确创建。源代码和“MAPI/outlook配置文件所指向的exchange环境”都相同。配置文件是使用MAPI子系统创建的 有关应用程序的说明:该应用程序是基于windows服务的应用程序。该服务执行COM应用程序。COM应用程序生成一个新线程来创建一个新的概要文件,并发送一条示例消息 实际问题:在概要文件创建过程中,对ConfigureMsgS

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

有关应用程序的说明:该应用程序是基于windows服务的应用程序。该服务执行COM应用程序。COM应用程序生成一个新线程来创建一个新的概要文件,并发送一条示例消息

实际问题:在概要文件创建过程中,对ConfigureMsgService函数(属于IMsgServiceAdmin)的调用无法正常工作,即使它返回S_OK。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等)都会成功

我的问题是,相同的代码在Outlook2007环境中正常工作,但在Outlook2007SP2环境中失败

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

  • 有什么问题吗?我错过了什么吗
  • 是否有任何解决方法可用
  • 提前谢谢 萨拉瓦南

    你的问题在你笔记的第2页:

    请注意,1。当使用相同的代码时 从单机版执行 应用程序,它工作得很好。2.这个 如果 服务作为本地系统执行 帐户或作为网络服务 帐户

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

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

    *配置单元是用于注册表不同部分的术语。这里我们只处理用户自己的注册表部分。

    谢谢您的回复

    我试过你的主意,但没用。在这个案例中,我和微软谈过,他们已经为这个问题提供了解决方案(http://support.microsoft.com/kb/972363),它修好了

    萨拉瓦南