中等UAC完整性级别运行CLR应用程序?
作者:互联网
我一直在开发一个C#(WinForms)应用程序,该应用程序使用Office 2007 PIA与Outlook 2007集成.在我的开发环境中,UAC被禁用并且我的所有功能都可以运行,但是我的测试环境是32位Vista(已启用UAC) .
在测试环境中,默认情况下(由用户启动时),Outlook以中等完整性级别运行.我的应用程序要求很高的完整性级别(即,启动时会显示UAC提示).在这种情况下,从我的应用程序实例化Microsoft.Office.Interop.Outlook.Application类失败,并显示CO_E_SERVER_EXEC_FAILURE(COMException,HRESULT = 0x80080005).
我可以通过两种方法解决此问题:
>确保当我的应用程序实例化应用程序时Outlook没有运行-这将强制Outlook以高完整性模式运行,因为启动它的进程也以高完整性运行.
>指示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
标签:outlook,uac,c,vsto 来源: https://codeday.me/bug/20191105/1998257.html