注:
本贴不用讨论资源文件中加入 <requestedExecutionLevel level=”requireAdministrator”/>的方法,即不直接修改EXE文件的方法。
值类型:REG_SZ
值名称:C:abcxxx.exe
值数据:RUNASADMIN
function IsUACEnable : Boolean;
var
EnableLUA: Cardinal;
begin
try
if RegQueryDWordValue(HKEY_LOCAL_MACHINE, ‘SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem’,
‘EnableLUA’, EnableLUA) then
begin
// 读取值成功
Result := EnableLUA = 1;
end;
except
Result := False;
end;
end;
同时看到了以下有用的博文,通过修改注册表实现的正是本贴提出的要求:
http://blogs.itecn.net/blogs/winvista/archive/2006/08/09/UACV3.aspx
五种标识权限提升的方法
Windows Vista并没有一种与生俱来的魔力,可以未卜先知某个应用程序是否应该运行在更高安全级别上。应用程序必须自己想办法通知Windows Vista它需要更高权限。有以下五种方法,让Windows Vista明白该应用程序需要提升权限:
(1) Windows Vista可以智能识别安装程序,例如根据安装程序的文件名(包含install或者setup),还可以智能识别msi发布的安装包等等。可以做一个实验,如果修改其他某个应用程序的名字,例如将QQ.exe重命名为QQInstall.exe,运行它就会自动触发权限提升,原来UAC以为这是一个安装程序。
(2) 在可执行文件的属性对话框、兼容性标签页里勾选“以管理员身份启动该程序”复选框。这等效于在HKCU SoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers注册表分支下添加键值,也相当于修改C:WindowsAppPatch下的sysmain.sdb兼容性数据库。
(3) 在程序的manifest文件或者内嵌的manifest信息里加入“level=highestAvaible”或者“level requireAdministrator”安全级别。
(4) 鼠标右键单击应用程序,选择“用管理员帐户运行”菜单项。
(5) 利用ACT(应用程序兼容性工具)为特定应用程序创建兼容性数据库,以便IT部门可以方便地在企业里部署兼容性设置。
及
http://blogs.itecn.net/blogs/winvista/archive/2006/07/21/2945.aspx
修改UAC兼容性设置
能不能修改SC命令的兼容性设置,让系统知道它需要管理员权限?
但是打开SC命令的属性对话框,发现其兼容性设置被锁死,如下图所示,原因是SC命令属于系统内置的组件,这和Windows XP的情况一样。
图2
这里尝试修改注册表,试图绕过这个限制,把SC命令添加到系统的兼容性数据库中:
(1) 打开regedit注册表编辑器,定位到以下注册表项:
HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers
(2) 新增一个字符串键值:
名称必须设置为“C:Windowssystem32sc.exe”
并将其数值数据设置为“RUNASADMIN”
提示 该注册表修改完全等效于如图2所示的兼容性设置,只是绕开了UI的限制。
这以修改SC.exe的兼容性为例。
谢谢各位的关注!
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.