当 运行 作为管理员使用 CreateOleObject('Outlook.Application') 会导致 "Server execution failed" 错误
Using CreateOleObject('Outlook.Application') causes "Server execution failed" error when run as administrator
这是一个 Delphi XE2 应用程序。很简单。只需调用 CreateOleObject('Outlook.Application') 并将结果分配给 Variant。
如果程序是 运行 作为管理员,它会失败并显示 "Server execution failed",但它工作正常,如果我 运行 作为登录用户,我可以取回版本号 (没有提升的权限)。
这是为什么? 运行宁作为管理员阻止它创建对象的原因是什么?
此错误是由于安全上下文之间不匹配造成的。 Outlook 是单例的,因此 CreateOleObject
将连接到 运行ning 的 Outlook 实例(如果可用)。 COM 系统拒绝编组具有不同安全上下文的进程之间的调用。
要么确保 Outlook 在调用 CreateOleObject
时未 运行ning,要么确保两个进程 运行 在同一安全上下文中。
您也可以切换到直接使用或通过包装器(例如 Redemption (I am its author) - its RDO 对象系列大致对应于 Namespace
Outlook 对象模型中的对象。)。
这是一个 Delphi XE2 应用程序。很简单。只需调用 CreateOleObject('Outlook.Application') 并将结果分配给 Variant。
如果程序是 运行 作为管理员,它会失败并显示 "Server execution failed",但它工作正常,如果我 运行 作为登录用户,我可以取回版本号 (没有提升的权限)。
这是为什么? 运行宁作为管理员阻止它创建对象的原因是什么?
此错误是由于安全上下文之间不匹配造成的。 Outlook 是单例的,因此 CreateOleObject
将连接到 运行ning 的 Outlook 实例(如果可用)。 COM 系统拒绝编组具有不同安全上下文的进程之间的调用。
要么确保 Outlook 在调用 CreateOleObject
时未 运行ning,要么确保两个进程 运行 在同一安全上下文中。
您也可以切换到直接使用或通过包装器(例如 Redemption (I am its author) - its RDO 对象系列大致对应于 Namespace
Outlook 对象模型中的对象。)。