gpt4 book ai didi

c# - 以中等 UAC 完整性级别运行 CLR 应用程序?

转载 作者:行者123 更新时间:2023-11-30 15:47:25 26 4
gpt4 key购买 nike

我一直在开发一个 C# (WinForms) 应用程序,它使用 Office 2007 PIA 与 Outlook 2007 集成。在我的开发环境中,UAC 被禁用并且我的所有功能都正常工作,但我的测试环境是 Vista 32 位启用 UAC。

在测试环境中,Outlook 默认以中等完整性级别运行(当由用户启动时)。我的应用程序需要高完整性级别(即它在启动时显示 UAC 提示)。在这种情况下,从我的应用程序实例化 Microsoft.Office.Interop.Outlook.Application 类失败并出现 CO_E_SERVER_EXEC_FAILURE(COMException,HRESULT=0x80080005 ).

我可以通过两种方式解决这个问题:

  1. 确保当我的应用程序实例化 Application 时 Outlook 未运行 - 这会强制 Outlook 在高完整性模式下运行,因为启动它的进程也在高完整性模式下运行。
  2. 指示 Outlook 始终以管理员身份运行(“兼容性”选项卡)。

值得注意的是,Word 和 Excel PIA 不会出现此问题。

有什么办法可以解决这个问题吗?我的应用程序不能以低完整性运行,但有可能可以调整为以中等完整性级别运行 - 但是,我不知道如何做到这一点。 .NET 可执行文件甚至可以在此模式下运行吗?

或者,即使存在不匹配的完整性级别,是否有某种方式可以与 Outlook 通信?正如我所说,Word 和 Excel 似乎对此没有问题。

最佳答案

Can .NET executables even run in this mode?

.NET 应用程序可以在任何 UAC 完整性级别(包括系统级别和低级别)运行。

但一个进程只有一个完整性级别(将完整性列添加到 Process Explorer 以查看跨完整性级别的进程分布)。

如果您尝试运行 Outlook 的第二个实例,它只会显示现有实例,它会主动阻止两个实例运行。 Word 和 Excel 没有。

这些共同解释了您所看到的。当您实例化一个 Word 或 Excel 应用程序对象时,一个新的 Work 或 Excel 进程将以匹配的完整性级别运行。如果您使用 Outlook 执行此操作并且 Outlook 已经在运行,那么它将尝试附加到该现有进程。但除非 Outlook 已经以高完整性运行,否则这将失败。您应该能够通过以管理员身份运行 Outlook(即高度完整性)然后运行您的应用程序以附加到它来验证这一点。

要求用户以管理员身份运行 Outlook 是一个糟糕的主意(由于来自未知方的电子邮件附件的风险,以高完整性运行 Outlook 只会引发恶意软件感染)。

最好的方法(Explorer 等就是这样做的)是将您的进程分成两部分,使用 COM 名字对象仅提升应用程序中真正需要提升的部分。请参阅有关如何执行此操作的 SO 问题:How to UAC elevate a COM component with .NET

关于c# - 以中等 UAC 完整性级别运行 CLR 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com