什么是UAC?
在Windows7中加入了UAC(User Account Control,用户帐户控制)的功能,UAC是微软为提高系统安全而引入的,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员?密码。通过在这些操作启动前对其进行验证,UAC可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。
UAC对exe程序有什么影响?
通常开发的exe程序默认是没有赋予管理员权限的,在Win7下将不以管理员权限运行,UAC将阻止程序访问系统的某些功能(如修改注册表的某些项,保存配置文件等操作),导致程序的部分功能不能正确执行。
怎么将exe程序在Win7下以管理员权限运行
1 运行时选择身份
鼠标右键点击要运行的exe程序图标,在弹出菜单中选择“以管理员身份运行”,在弹出的“用户账户控制”确认界面中选择“是”即可。
2 修改exe属性
鼠标右键点击exe程序图标,在弹出的菜单中选择“属性”。
在弹出的界面中选择“兼容性”标签。
在“兼容性”页面中,勾选“以管理员身份运行此程序”,点击“确定”。
3 在工程中加入MANIFEST资源(C#)
打开VS2005、VS2008、VS2010工程,查看在Properties下是否有app.manifest这个文件;如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工程属性的“安全性”标签,在安全性标签页中勾选“启用ClickOnce安全设置”,并选择“这是完全可信的应用程序”,保存工程,此时在Properties下已经自动生成了app.manifest文件。
在app.manifest文件中,我们可以看到有注释说明UAC选项,找到以下节点:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />将asInvoker,更改为requireAdministrator,更改后的app.manifest文件如下:
<?xml version="1.0" encoding="utf-8"?><asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
</applicationRequestMinimum>
</security>
</trustInfo>
</asmv1:assembly>
编译更改后的工程,编译出来的exe文件将会自动以管理员权限运行。
怎么禁用UAC功能
禁用方法:“控制面板-用户账户和家庭安全-用户账户-用户账户控制设置”,设置为“从不通知”,保存,重启。
提醒:禁用UAC功能将降低了用户电脑的安全性,这也违背了Windows引入UAC的出发点。
怎么减小UAC对exe程序的影响
UAC保护的是系统的关键资源,程序避开对UAC保护的资源的写入是比较好的解决办法,可以尝试以下方法:
- 把程序文件放在 "Programming Files" 下, 其他需要写的文件放到 "Local Settings"、"User Document" 等文件夹下
- 如果需要写入注册表,写在不需要管理员权限的节点下,如HKCR等。