开发者社区> 狼人2007> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[C#]解决程序Vista/Win7下因UAC导致的读写错误

简介: 在微软的操作系统中,vista和win7加入了UAC的功能,UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。
+关注继续查看

在微软的操作系统中,vista和win7加入了UAC的功能,UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。通过在这些操作启动前对其进行验证,UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。

image

如图中所示,不属于 Windows 的一部分的程序需要您的许可才能启动。它具有指明其名称和发行者的有效的数字签名,该数字签名可以帮助确保该程序正是其所声明的程序。确保该程序正是您要运行的程序。

但是这样对于我们来说,会有这样一种情况出现,我们开发的程序默认是没有给它管理员权限的,如果我们把程序安装了到系统盘下,那么某些读写程序目录下配置文件的操作就无法正确执行,因为被UAC阻拦,但是程序却无法告诉我们什么时候被阻拦,因为我们无法获取到UAC的阻拦信息。

很遗憾,我们最近开发的程序就出现了这种问题,测试了很多次,一个装有win7系统的客户向我们回馈了这个问题,我经过自己思考和搜索MSDN,想了一下,大概有3种方法解决,给大家分享一下:

1:关闭用户的UAC功能(显然这个方法对于客户来说有点不靠谱,但是这里我也提一下,因为我就是特别烦UAC的提醒,所以给关闭了,程序一直也没有报错)。

关闭方法“控制面板-用户账户和家庭安全-用户账户-用户账户控制设置”,设置为“从不通知”,保存,重启就OK了。

2:这个方法很简单,就是在运行的时候右键“以管理员身份运行”。也是可以解决此问题,但是对于那些只想直接单击就运行的用户来说,估计他们也还是难以接受。

3:这个方法就比较长些了,解决出发点也是从我们自己的程序来解决。我来写一下步骤:

<1>.在项目中“新建项”,选择“应用程序清单”,自己命名文件名称,如下图所示:

image

<2>.打开建立的清单文件,扩展名为.manifest,查看代码,如下图:

image

我们可以看到有注释说明UAC选项,我们需要更改的是这个节点的内容:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />将asInvoker,更改为requireAdministrator,以字面意思,我们大家就可以看出这个是请求以管理员权限运行的意思。当然还有一个选项,highestAvailable,网上没有直接翻译,但从字面理解,就是获取最高执行权限的意思,这个可以根据自己的实际情况来设置。

<3>.打开项目属性,将“应用程序-资源”中的“清单”一项选择为你创建的清单文件,如图:

image

然后生成一下应用就可以了。

文章到这基本就结束了,这里也只是简单的解决目前自己遇到的问题,网上查询了一下,很多也都是英文的介绍,无奈哥们E文实在不是太好,勉强看懂了一些,实践了一下,解决了手里的问题,希望能帮到遇到同样问题的朋友。 备注:VS2008和VS2010下添加清单,都如本文一样,VS2005会比较麻烦一些,我机器上只装了08和10,没有尝试如何采用05解决,请装了05的哥们尝试一下自己解决吧,或者升级到08或者10吧。

参考文献:

1:Using Manifests to Elevate an application in Vista

2:Create and Embed an Application Manifest (UAC)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
教妹学Java(十八):break 关键字详解
教妹学Java(十八):break 关键字详解
20 0
新一代视频编码标准:VVC、AVS3
本文来自北京大学信息科学技术学院教授马思伟在LiveVideoStackCon 2018大会上的演讲,详细介绍了最新一代VVC和AVS3视频编码标准进展,包括关键技术特色以及未来的应用展望。
635 0
申通快递:核心业务系统云原生化上云技术详解
如果说,快递行业上半场的竞争拼的是规模、服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力。——周金龙(遥方)
1405 0
Mac OS X编译最新webkit(2013-03-15)
安装Xcode,4.5版本或以上。必须要安装的方式,不能copy。 xcode菜单Xcode->Preferences...->Downloads->Components栏选择Command Line Tools的Install。
842 0
Win7系统应用程序不能拖放文件原来又是UAC是惹的祸
 一定要先开启文本框的拖放属性this.txtPath.AllowDrop = true;本来就是一个很简单的问题,妈的,浪费我一个多小时。愿意就是罪魁祸首就是win7的UAC权限导致的。又是一个蛋疼的问题! private void txtPath_DragEnter(object sender, DragEventArgs e)        {            if (e.
893 0
+关注
狼人2007
个人对技术的追求:代码少而精捍;思路清晰美观;可扩展好维护;技术驱动商业; 人生格言:只要你有信念,有追求,并且坚持,那你一定比随波逐流,行得远行得正...
3523
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载