我们有一个可以作为Windows服务(或用户模式应用程序)运行的应用程序。作为其处理的一部分,它启动第二个可执行文件,它与MAPI交互以读取MSG文件的内容。可执行文件是32位。办公室是32位。到目前为止,我们仅使用Outlook 2013进行了测试。
很长一段时间以来一直运作良好,但我们最近发现了一个不起作用的极端案例。
当我们作为Windows服务运行,并且Outlook在用户的会话中不运行时,应用程序正常运行。但是,如果我们启动Outlook,则MAPIInitialize将失败,返回码为-7(0xfffffffd)。
我尝试使用和不添加MAPI_NT_SERVICE标志进行呼叫(老实说,我无法弄清楚该标志实际上做了什么),但它没有任何区别。
到目前为止,在我们的测试中,Windows服务帐户与登录安装了Outlook的Windows会话的用户相同 - 不确定是否重要。
我不能为我的生活弄清楚在一个会话下运行的进程如何干扰在另一个会话中运行的进程。
我会给出一个机会,但这似乎是不可能的,这可能是问题(它不像我们做任何不同的COM初始化,当然那不会有任何东西与Outlook是否正在运行有关。)
有人能指出我的方向吗?
=============
更有趣的信息:
这似乎只发生在Outlook 2013中。在Outlook 2010中绝对不会发生。