Com MAPIInitialize在作为服务运行和Outlook打开时失败

Com MAPIInitialize在作为服务运行和Outlook打开时失败,com,windows-services,mapi,Com,Windows Services,Mapi,我们有一个可以作为Windows服务(或用户模式应用)运行的应用程序。作为处理的一部分,它启动第二个可执行文件,与MAPI交互以读取MSG文件的内容。可执行文件是32位的。Office是32位的。到目前为止,我们只使用Outlook 2013进行了测试 这在相当长的一段时间内一直运作良好,但我们最近发现了一个角落的情况,事情不起作用 当我们作为Windows服务运行时,Outlook未在用户会话中运行,则应用程序运行正常。但是,如果启动Outlook,则MAPIInitialize将失败,返回代

我们有一个可以作为Windows服务(或用户模式应用)运行的应用程序。作为处理的一部分,它启动第二个可执行文件,与MAPI交互以读取MSG文件的内容。可执行文件是32位的。Office是32位的。到目前为止,我们只使用Outlook 2013进行了测试

这在相当长的一段时间内一直运作良好,但我们最近发现了一个角落的情况,事情不起作用

当我们作为Windows服务运行时,Outlook未在用户会话中运行,则应用程序运行正常。但是,如果启动Outlook,则MAPIInitialize将失败,返回代码为-7(0xFFFFFD)

我尝试过在添加MAPI\u NT\u服务标志和不添加MAPI\u NT\u服务标志的情况下调用(老实说,我不知道该标志实际起什么作用),但这没有什么区别

到目前为止,在我们的测试中,Windows服务帐户与登录安装了Outlook的Windows会话的用户相同-不确定这是否重要

我一辈子都搞不清楚在一个会话下运行的进程如何会干扰在另一个会话中运行的进程

几分钟前我发现了这篇帖子:

我会试一试,但这似乎不太可能是问题所在(我们对COM初始化没有做任何不同的操作,当然这与Outlook是否正在运行没有任何关系)

有人能给我指出这方面的方向吗

=============

更有趣的信息:


这似乎只有在Outlook 2013中才会发生。Outlook 2010肯定不会出现这种情况。

您确定MAPIINitialize返回0xFFFFFD吗?这听起来不像我见过的任何MAPI错误代码?是的,我很确定。我要再深入一点。我们正在使用MAPIStubLibrary项目与MAPI进行交互(这基本上只是针对MAPI DLL进行动态绑定),因此从技术上讲,存在某种转换的可能性-但我仔细检查了代码-他们所做的只是LoadLibrary、getprocaddress和调用。如果loadlibrary或getprocaddress失败,它将返回一个默认值MAPI_E_CALL_FAILED(即E_fail,或0x80004005)。因此0xFFFFFD的返回值非常奇怪。但我将再次检查它以确定是否失败。