[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)

时间: 2024-09-12 09:02:35

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

mfc win7 权限-MFC应用程序在win7下管理员权限的问题

问题描述 MFC应用程序在win7下管理员权限的问题 MFC开发的程序我知道可以通过配置清单文件的UAC执行级别来提示程序的权限.但问题时这样的配置在win7一定会提示UAC的对话框很不友好.在不关闭系统UAC的情况下有没有办法不弹出UAC对话框或者不设置UAC级别依旧可以拥有管理员权限呢? 解决方案 创建windows服务程序.

gdi-打印程序在Win7 下 连接部分 佳能打印机 无法打印

问题描述 打印程序在Win7 下 连接部分 佳能打印机 无法打印 打印程序(gdi printer api)在xp下连佳能打印机能打印,换到win7环境下, 只有部分型号打印机可以打印,求指点! 解决方案 是程序代码,不是设置问题! 解决方案二: 使用兼容模式运行试试 解决方案三: dos模式时选择启用usb模式 解决方案四: Win7 设置打印机双面打印使能

MFC程序在Win7下运行正常,在XP下提示参数不正确,运行不了

问题描述 MFC程序在Win7下运行正常,在XP下提示参数不正确,运行不了,直接不运行,是怎么回事呐 解决方案 解决方案二:也许是DLL版本的问题解决方案三:静态编译试试解决方案四:可能是文件相对路径或者外部控件丢失的问题解决方案五:64bit32bit问题?具体错误是啥,贴出来看看.解决方案六:贴图.谁知道啥错了.大部分程序是没错的.八成是用到参数了.参数配置不对啊/////////////////////////////////////////////////////////////////

win7电脑关闭UAC导致侧边栏消失问题解决办法

1.我们只要在电脑的中按下 win+R 组合键,然后在弹出运行对话框输入 regedit并单击回车. 2.在win注册表编辑界面我们定位到:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSidebarSetting,然后在右侧的窗口中找到AllowElevatedProcess选项并双击打开. 3.在弹出来的设置窗口中,咱们将该项的数值数据中的默认值修改为1,然后点击保存退出注册表.这个时候大家在看看屏幕的侧边栏,应该就可以使用了

c#写的程序,win7 下程序运行正常,升级win10后提示dll找不到,如何解决?

问题描述 都是64位系统,编译正常.之前win7运行没有任何问题,升级到win10后就提示如图.dll文件都是程序同一目录内.尝试注册dll文件也失败,新手,求指导 解决方案 解决方案二:windows10下重新编译过么?.NetFramework的框架是不是4.5?解决方案三:看一看这个dll的引用路径指向哪里解决方案四:找不到路径了,升级升没了或者位置变了解决方案五:引用1楼shoppo0505的回复: windows10下重新编译过么?.NetFramework的框架是不是4.5? win

c#让程序在WIN7下兼容模式运行

原文http://www.cnblogs.com/feiyangqingyun/archive/2013/05/29/3106238.html 以前在xp下开发,最近全部转移到WIN7下,发现程序运行会有个小问题,就是获取系统 当前是否静音的时候,以前在XP下运行的好好的,到了WIN7下就不行了,后面想到用管理员方式运行,还是不行,擦,后面突然想到,还有个兼容模式,之前 在WIN7下安装某些软件的时候,就提示不能安装在program file目录下,解决方法是右键属性选择兼容模式运行,受此启发,

Delphi2007编译的程序在Win7下图标模糊的解决办法_Delphi

使用Delphi2007编译GUI程序的时候会发现在Win7的状态栏中显示的程序图标非常模糊,如果原始的图标清晰度怎么样.造成这样结果的原因是因为Delphi2007生成的icon图标只符合XP等系统的要求,没有对Win7进行优化处理.网上有很多处理的方式,后来找到一个最简单有效的方法,就是只设置项目的图标而不要设置Form窗口的图标. 参考资料: Blurred Delphi Form Icon in Windows 7 Taskbar Delphi form icons are blurry

win7电脑关闭UAC导致侧边栏消失怎么办?

  可能对于很多用户来说,对于UAC账户并不是很熟悉,是的,因为一般的预装系统都会自动默认关闭UAC账户.其实UAC账户是微软引进的一个提升系统安全性能的功能,不过安全的同时也伴随着用户的操作需要对各种各样的弹出窗口进行选择,这让很多用户不胜其烦,所以一般的系统会选择默认关闭掉该功能.但是关闭这个功能之后,我们发现,屏幕的侧边栏也无法使用了,那么这个问题是否可以解决呢?下面,小编就以win7旗舰版为例,为大家讲解一下吧! 1.首先,咱们同时按下win+R打开电脑的运行窗口,在运行窗口中输入reg

Win7下如何让程序始终以管理员身份运行

在Win7中,有些程序必须"以管理员身份运行"才能正常使用,一般情况下,在开启这类程序时,用鼠标右键点击程序图标,然后选择"以管理员身份运行"就可以了.虽然操作简单,但Win7中的程序那么多,难免有时会忘记.那么,如何能让程序在Win7下始终以管理员身份运行呢?方法其实很简单. 首先,同样用鼠标右键点击程序图标,然后选择"属性". 打开程序属性 切换到"兼容性"选项卡,勾选最下方的"以管理员身份运行".