[C#]解决程序Vista/Win7下因UAC导致的读写错误
在微软的操作系统中,vista和win7加入了UAC的功能,UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。通过在这些操作启动前对其进行验证,UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。
如图中所示,不属于 Windows 的一部分的程序需要您的许可才能启动。它具有指明其名称和发行者的有效的数字签名,该数字签名可以帮助确保该程序正是其所声明的程序。确保该程序正是您要运行的程序。
但是这样对于我们来说,会有这样一种情况出现,我们开发的程序默认是没有给它管理员权限的,如果我们把程序安装了到系统盘下,那么某些读写程序目录下配置文件的操作就无法正确执行,因为被UAC阻拦,但是程序却无法告诉我们什么时候被阻拦,因为我们无法获取到UAC的阻拦信息。
很遗憾,我们最近开发的程序就出现了这种问题,测试了很多次,一个装有win7系统的客户向我们回馈了这个问题,我经过自己思考和搜索MSDN,想了一下,大概有3种方法解决,给大家分享一下:
1:关闭用户的UAC功能(显然这个方法对于客户来说有点不靠谱,但是这里我也提一下,因为我就是特别烦UAC的提醒,所以给关闭了,程序一直也没有报错)。
关闭方法“控制面板-用户账户和家庭安全-用户账户-用户账户控制设置”,设置为“从不通知”,保存,重启就OK了。
2:这个方法很简单,就是在运行的时候右键“以管理员身份运行”。也是可以解决此问题,但是对于那些只想直接单击就运行的用户来说,估计他们也还是难以接受。
3:这个方法就比较长些了,解决出发点也是从我们自己的程序来解决。我来写一下步骤:
<1>.在项目中“新建项”,选择“应用程序清单”,自己命名文件名称,如下图所示:
<2>.打开建立的清单文件,扩展名为.manifest,查看代码,如下图:
我们可以看到有注释说明UAC选项,我们需要更改的是这个节点的内容:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />将asInvoker,更改为requireAdministrator,以字面意思,我们大家就可以看出这个是请求以管理员权限运行的意思。当然还有一个选项,highestAvailable,网上没有直接翻译,但从字面理解,就是获取最高执行权限的意思,这个可以根据自己的实际情况来设置。
<3>.打开项目属性,将“应用程序-资源”中的“清单”一项选择为你创建的清单文件,如图:
然后生成一下应用就可以了。
文章到这基本就结束了,这里也只是简单的解决目前自己遇到的问题,网上查询了一下,很多也都是英文的介绍,无奈哥们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)
[C#]解决程序Vista/Win7下因UAC导致的读写错误的更多相关文章
- [转]让程序不触发 Vista/Win7下应用程序兼容性助手弹出 .
原文地址 http://blog.csdn.net/maxuhuiabc/article/details/6081874 在Vista/Win7下 运行一个 exe 应用程序后,系统经常弹出 兼容性助 ...
- 【已解决】Android Studio下,gradle project sync failed 错误
原文:[已解决]Android Studio下,gradle project sync failed 错误 Android studio下突然报错 gradle project sync failed ...
- VS2003在vista/win7下搜索会出现僵死
1. VS2003在vista下搜索关键词的时候会出现僵死的问题的解决方案: VS2003快捷方式右击选中属性->兼容性页签 : 选中用兼容模式运行这个程序,下拉框中用windows xp2 ...
- 让你的WPF程序在Win7下呈现Win8风格主题
今天在Win8下使用了一个我之前写的一个WPF程序的时候,发现现在也支持Win8效果了(记得以前的.net 4.0的版本是不支持的).由于WPF的控件是自绘的,并不受系统主题所控制,也就是说.net ...
- 转:win7下git凭据导致无法clone代码
win7下存在一个凭据管理的情况,如果旧凭据没有删除,用新账户是无法clone代码的. https://blog.csdn.net/qq_34665539/article/details/804082 ...
- 终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月
用 Win7 一年多了,一直在这个环境下编程,其他都挺好,就是有个问题非常恶心,在VS下编译经常出现进程正在使用,无法覆盖的错误,这个问题我记得博问中以前也有其他人遇到过,也没有解决掉.此问题困扰了我 ...
- vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)
打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...
- VS2005 VS2008编译的程序在Win7下以管理员身份运行的设置
在VS2005或者VS2008 里面,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译 这样你的程序直接运行就拥有管理 ...
- csharp:引入app.manifest,程序在win7下以管理员权限运行配置方法
https://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx https://msdn.microso ...
随机推荐
- ros网址链接
安装教程:http://wiki.ros.org/cn/indigo/Installation robotics:http://www.rethinkrobotics.com/ 学习教程:http:/ ...
- mybatis由浅入深day01_8输出映射_8.1resultType输出类型(8.1.1输出简单类型_8.1.2输出pojo对象和pojo列表_8.1.3输出hashmap)
8 输出映射 8.1 resultType(输出类型) 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全 ...
- POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)
Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...
- NodeJS-003-自动刷新
修改index.js之后,发现刷新浏览器,没有任何更改,需要关闭应用重新启动. 为了避免每次修改代码后要自动重启.通过安装supervisor来监控代码修改. 安装:npm install -g su ...
- laravel 强大的关联模型
内容比较多,不总结了,直接看学院君的译文吧,已经写得很详细了 传送门:http://laravelacademy.org/post/6191.html PS1: laravel的关联模型并不是遍历一次 ...
- 使用keytool生成密钥对
1.首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效) keytool -genkey -alias privatekey -keystore p ...
- linux系统socket通信编程详解函数
linux socket编程之TCP与UDP TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...
- linux系统usb挂载
本次例程的环境是在FC6下,通过终端操作的. 注意要挂载U盘需要有管理员的权限. 切换成管理员,输入: su root 然后输入管理员密码,进行密码认证: 成功后,先在 /mnt 下建立一个名叫USB ...
- iOS文件处理介绍(一)
一.在Documents.tmp和Library中存储文件 Documents:用于存储应用程序中经常需要读取或写入的常规文件. tmp:用于存储应用程序运行时生成的文件.(随着应用程序的关闭失去了利 ...
- 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记
C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...



