这是一款Delphi XE2应用程序。很简单。只需调用CreateOleObject('Outlook.Application')并将结果分配给Variant。
如果程序以管理员身份运行,它会因“服务器执行失败”而失败,但它运行正常,如果我以登录用户身份运行(没有提升权限),我可以恢复版本号。
这是为什么?以管理员身份运行会阻止它创建对象是什么?
答案 0 :(得分:7)
此错误是由于安全上下文之间不匹配造成的。 Outlook是一个单例,因此如果可用,CreateOleObject将连接到正在运行的Outlook实例。 COM系统拒绝在具有不同安全上下文的进程之间编组调用。
在调用CreateOleObject时确保Outlook未运行,或确保两个进程在相同的安全上下文中运行。
您还可以切换到直接使用或通过包装器(例如Redemption)使用的扩展MAPI(这是一组在进程中加载的dll) - 其RDO对象系列大致对应于Outlook对象模型中的Namespace
对象。)。