使用CreateOleObject('Outlook.Application')导致以管理员身份运行时出现“服务器执行失败”错误

时间:2015-03-30 05:21:37

标签: delphi outlook delphi-xe2

这是一款Delphi XE2应用程序。很简单。只需调用CreateOleObject('Outlook.Application')并将结果分配给Variant。

如果程序以管理员身份运行,它会因“服务器执行失败”而失败,但它运行正常,如果我以登录用户身份运行(没有提升权限),我可以恢复版本号。

这是为什么?以管理员身份运行会阻止它创建对象是什么?

1 个答案:

答案 0 :(得分:7)

此错误是由于安全上下文之间不匹配造成的。 Outlook是一个单例,因此如果可用,CreateOleObject将连接到正在运行的Outlook实例。 COM系统拒绝在具有不同安全上下文的进程之间编组调用。

在调用CreateOleObject时确保Outlook未运行,或确保两个进程在相同的安全上下文中运行。

您还可以切换到直接使用或通过包装器(例如Redemption)使用的扩展MAPI(这是一组在进程中加载​​的dll) - 其RDO对象系列大致对应于Outlook对象模型中的Namespace对象。)。