WIN7, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改。
对于Delphi程序的影响,UAC主要在于以下几点:
1、由于UAC机制,Delphi对于系统的操作可能无声的失败,而同样的程序,在2000/X下面可能运行正常。譬如注册表的改动。。。
2、为了避免这样的情况,Delphi程序必须支持Vista UAC标注,也就是说,在UAC程序的图标下面显示盾牌标志。这样可以在需要系统更高权限的时候,提醒用户。
为了让程序显示UAC标志,现在看来Vista是通过读取程序的资源(Resource)里面的MANIFEST资源,来决定是否显示“UAC盾牌”。
为了支持UAC,Delphi程序必须在资源里面嵌入MANIFEST信息。

1、首先编辑一个文件,内容如下:

  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  3. <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  4. <application>
  5. <!--The ID below indicates application support for Windows Vista -->
  6. <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
  7. <!--The ID below indicates application support for Windows 7 -->
  8. <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
  9. <!--The ID below indicates application support for Windows 8 -->
  10. <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
  11. </application>
  12. </compatibility>
  13. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  14. <security>
  15. <requestedPrivileges>
  16. <requestedExecutionLevel level="requireAdministrator" />
  17. </requestedPrivileges>
  18. </security>
  19. </trustInfo>
  20. </assembly>

【注】compatibility字段是为了禁止兼容性助手弹出,trustInfo字段是为了解决uca提权。
保持为UAC.manifest,这里文件是随意的。特别注意红色的“requireAdministrator”,这个表示程序需要管理员(Administrator)才能正常运行。
 UAC Manifest 选项

  1. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
  2. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  3. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />

2、然后编辑一个RC文件,名为uac.rc

  1. 1 24 UAC.manifest

其中:
1-代表资源编号
24-资源类型为RTMAINIFEST
UAC.manifest-前面的文件名称

3、用brcc32编译这个rc文件为res文件

  1. brcc32 uac.rc -fo uac.res
其中 -fo 设置输出文件名

4、在程序里面加入
{$R uac.res}

或者将3,4合并为 {$R 'uac.res' 'uac.rc'}

需要将uac.rc添加到项目中

让Delphi编译的时候,把uac.res编译进exe文件
程序图标下面显示UAC盾牌标志了。

5、注意,这个程序不能运行在subst 虚拟驱动器上,否则会提示“指定路径不存在”
6、在编译时若产生错误:在project->options->application->enable runtime themes前面的勾取消,再编译就可以了!

附件列表

Delphi与Windows 7下的用户账户控制(UAC)机制 及 禁用兼容性助手的更多相关文章

  1. Delphi与Windows 7下的用户账户控制(UAC)机制

    WIN7, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改.对于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi对于系统的操作可能无声的失败, ...

  2. Delphi与Windows 7下的用户账户控制(UAC)机制(有可能需要取消enable runtime themes)

    WIN7/WIN8/WIN10, Vista提供的UAC机制,它的主要目的是防止对于操作系统本身的恶意修改.对于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi对于系统 ...

  3. Win8系统如何关闭用户账户控制UAC

    按WIN+S,屏幕右侧出现搜索框,在搜索框中输入UAC,然后单击"更改用户账户控制设置"   然后把弹出的窗口改成"从不通知"就可以了  

  4. 不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序

    微软有个官方工具 Microsoft Application Compatibility Toolkit: http://www.microsoft.com/downloads/details.asp ...

  5. Linux下关于用户账户的几个文件解析

    Linux下关于用户账户的几个文件解析 Linux是一个多用户系统,但是对于一个多用户共存的系统中,当然不能够出现用户相互越权等一系列的安全问题,所以如何正确的管理账户成为了Linux系统中至关重要的 ...

  6. win7如何设置某个软件不弹出用户账户控制

    手动修改注册表: 在 HKEY_CURRENT_USERS\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 键下面 ...

  7. [Win32] UAC用户账户控制 (提权)

    最近写程序时遇到一个问题,就是当一个程序需要管理员权限才能正常运行该怎么办? 通过查阅多方资料,我总结出来几个比较实用的办法(每种办法实现方法不同,同时功能上也有一些小小的差异) 方法一(批处理脚本) ...

  8. WIN10系统如何关闭用户账户控制

    在底部搜索框中输入UAC,打开用户账户控制设置   更改为从不通知即可

  9. CentOS下解决”用户账户is not in the sudoers file“问题

    如上图,在当前用户cent(我的用户名)下使用sudo命令时,提示"cent is not in the sudoers file. This incident will be report ...

随机推荐

  1. Dynamics AX 2012 R2 安装Reporting Services 扩展

    今天Reinhard在VS中部署SSRS报表时,接到以下错误: 部署因错误而被取消.在报表服务器上,验证:-SQL Server Reporting Services 服务是否正在运行. 接着,Rei ...

  2. myeclipse快捷键

    转: 当时我看到struts2讲解视频的时候,讲解员居然能一下子注释掉好几行代码,而且注释的很整齐,然我大吃一惊,上网搜了下Myeclipse的快捷键还真多选择你要注释的那一行或多行代码,按Ctrl+ ...

  3. FireDAC 连接access MDB数据库的方法

    Use Cases Open the Microsoft Access database. DriverID=MSAcc Database=c:\mydata.mdb Open the Microso ...

  4. SpringMVC框架下的拦截器

    在eclipse的javaEE环境下:导包.... web.xml文件中的配置: <?xml version="1.0" encoding="UTF-8" ...

  5. USB 设备的PID-Product ID,VID-Vendor ID

    根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID 和PID都是两个字节长,其中,供应商ID(VID)由供应商向 ...

  6. 【HDU2255】奔小康赚大钱-KM算法

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  7. centos7 yum 方式安装nginx

    centos7系统库中默认是没有nginx的rpm包的,所以我们自己需要先更新下rpm依赖库 (1)使用yum安装nginx需要包括Nginx的库,安装Nginx的库 #rpm -Uvh http:/ ...

  8. ie不兼容的几个js问题及解决办法

    1.table问题 在动态新增tr或者td时,createElement()一般用appendChild();都不生效,解决办法是用新增tbody,如 var table=document.creat ...

  9. IOS苹果和百度地图的相关使用

    iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...

  10. python os模块(2)

    os模块主要用于:目录.文件(删除.判断.分割文件名和后缀) 目录 (1)获取当前目录(2)修改目录(3)生成目录(4)删除目录(5)查看目录下的内容(6)重命名目录(7)修改时间属性(8)链接目录( ...