在微软的操作系统中,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导致的读写错误的更多相关文章

  1. [转]让程序不触发 Vista/Win7下应用程序兼容性助手弹出 .

    原文地址 http://blog.csdn.net/maxuhuiabc/article/details/6081874 在Vista/Win7下 运行一个 exe 应用程序后,系统经常弹出 兼容性助 ...

  2. 【已解决】Android Studio下,gradle project sync failed 错误

    原文:[已解决]Android Studio下,gradle project sync failed 错误 Android studio下突然报错 gradle project sync failed ...

  3. VS2003在vista/win7下搜索会出现僵死

    1.  VS2003在vista下搜索关键词的时候会出现僵死的问题的解决方案: VS2003快捷方式右击选中属性->兼容性页签 : 选中用兼容模式运行这个程序,下拉框中用windows xp2 ...

  4. 让你的WPF程序在Win7下呈现Win8风格主题

    今天在Win8下使用了一个我之前写的一个WPF程序的时候,发现现在也支持Win8效果了(记得以前的.net 4.0的版本是不支持的).由于WPF的控件是自绘的,并不受系统主题所控制,也就是说.net ...

  5. 转:win7下git凭据导致无法clone代码

    win7下存在一个凭据管理的情况,如果旧凭据没有删除,用新账户是无法clone代码的. https://blog.csdn.net/qq_34665539/article/details/804082 ...

  6. 终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月

    用 Win7 一年多了,一直在这个环境下编程,其他都挺好,就是有个问题非常恶心,在VS下编译经常出现进程正在使用,无法覆盖的错误,这个问题我记得博问中以前也有其他人遇到过,也没有解决掉.此问题困扰了我 ...

  7. vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  8. VS2005 VS2008编译的程序在Win7下以管理员身份运行的设置

    在VS2005或者VS2008 里面,直接项目右键---属性---连接器---清单文件---uac执行级别   选择requireAdministrator  重新编译 这样你的程序直接运行就拥有管理 ...

  9. csharp:引入app.manifest,程序在win7下以管理员权限运行配置方法

    https://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx https://msdn.microso ...

随机推荐

  1. 通过notepad++将混乱的xml配置的格式进行美化

    需求描述: 最近在进行hbase配置文件的修改之后,发现xml文件的格式很不美观, 然后,在网上找了些方法,实测,通过notepad++的xml tools插件就可 达到美化效果. 操作过程: 1.以 ...

  2. Android:控件布局(相对布局)RelativeLayout(转)

    相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above----------位于给定DI控件之上android:layout_below ------ ...

  3. laravel 控制器构造方法注入request对象

    IndexController: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\ ...

  4. NPOI抓取WPS表格保存的EXCEL文件

    其实是可以抓取的,唯一不同就是Sheet的位置前进了一位.     var sheet1 = (HSSFSheet)hssfworkbook.GetSheetAt(1);     来自为知笔记(Wiz ...

  5. ActiveMQ内存配置和密码设置

    1.配置内存 bin中activemq.bat 中的第一行 加上 : REM 配置内存 set ACTIVEMQ_OPTS=-Xms1G -Xmx1G 2.修改控制台密码 1.打开conf/jetty ...

  6. stm32入门(从51过渡到32)

    单片机对于我来说,就是一个超级大机器,上面有一排一排数不尽的开关,我需要做的,就是根据我的设计,拿着一张超级大的表(Datasheet),把需要的开关(reg)都开关(config)到对应功能的位置( ...

  7. IIC协议

    总线信号 :  SDA :串行数据线 SCL  :串行时钟 总线空闲状态 : SDA :高电平 SCL :高电平 起始位:SCL为高电平期间    SDA出现下降沿 终止位:SCL为高电平期间 SDA ...

  8. EL表达式格式化日期时间

    1.首先引入标签库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...

  9. 图片上传根据stream生成image

    对于图片上传代码的整合 因为需要判断上传的图片的宽高是否符合尺寸,所以在最初拿到inputstream的时候,就直接获取image格式的图片 本来是想在下面的checkFile中获取的,不过直接使用S ...

  10. java基础---->多线程之wait和notify(八)

    这里学习一下java多线程中的关于wait方法和notify方法的用法.命运不是风,来回吹,命运是大地,走到哪你都在命运中. wait和notify方法的使用 一.wait与notify的简单实例 i ...