ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-05 22:05:15  阅读:268  来源: 互联网

标签:outlook uac c vsto


我一直在开发一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有