Delphi与Windows 7下的用户账户控制(UAC)机制(加小盾牌),注册表没反应

摘要:
WIN7是Vista提供的UAC机制,主要用于防止恶意修改操作系统本身。至于Delphi程序的影响,UAC主要在于以下几点:1.由于UAC机制,Delphi可能会默默地无法运行系统,而同一程序在2000/X下可能会正常运行。为了让程序显示UAC标志,现在看来Vista通过读取程序资源中的MANIFEST资源来决定是否显示“UAC屏蔽”。

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

1、首先编辑一个文件名为UAC.manifest,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">  
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator"/>
      </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

保存为UAC.manifest,这里文件是随意的。特别注意红色的“requireAdministrator”,这个表示程序需要管理员(Administrator)才能正常运行。
 UAC Manifest 选项
          
<requestedExecutionLevel  level="asInvoker" uiAccess="false"/>
          
<requestedExecutionLevel  level="requireAdministrator" uiAccess="false"/>
          
<requestedExecutionLevel  level="highestAvailable" uiAccess="false"/>

2、然后再新建一个编辑文件,名为uac.rc,加入下面一行内容:
1 24 UAC.manifest

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

3、用brcc32编译这个rc文件为res文件
brcc32 uac.rc -fouac.res
其中 -fo 设置输出文件名
4、打开Project菜单下的View Source菜单项或直接编辑项目的dpr文件,然后在

{$R *.res}
下面添加一行
{$R uac.res}

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

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

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

免责声明:文章转载自《Delphi与Windows 7下的用户账户控制(UAC)机制(加小盾牌),注册表没反应》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇unity3D中的label控件基本操作创建线程是否调用CloseHandle下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python 的音乐库

前言 其实处理这个用 Matlab 最方便,之前把 guitar-synthesizer 从 Matlab 移植到 Python,过程中更是体会到了这一点。不过 Matlab 安装包又大,启动又慢,还是收费软件。。平常也不怎么用得到,毕竟我也不搞算法、仿真。 所以还是,Python 真香hhh 库 音乐的时域处理 标准库有个 wave 模块,可以转成 w...

centos7安装python 与卸载python

安装python 下载Python安装包 1 cd /usr/local/src 编译时要提前装好gcc编译器和zlib zlib-devel 1、下载文件 1 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 2、解压 1 tar -zxvf Python-3.6.0...

Java调用Python程序

最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式。 一、使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不支持json。因此, 升级了最新的Jython2.7.0,发现可以支持。因此,要使用更多python库,建议使用更高版本的Jython包。 首先,添加Jyth...

linux 系统 解决php -v查看到版本于phpinfo()打印的版本不一致问题

发现问题的原因:   安装zip扩展后,配置成功,但是使用gitlab合并的时候发生错误,经检查,使用phpinfo打印出来的php版本为7.1,而使用linux度服务器 运行 php -v的版本却是5.4,故怀疑加载的php.ini文件不一致 解决方案        首先查找一下linux上有几个php.ini。结果发现有两个:       使用命令来查...

scala 日期格式转换

scala> val format = new java.text.SimpleDateFormat("dd-MM-yyyy") 注意MM必须要大写 format: java.text.SimpleDateFormat = java.text.SimpleDateFormat@9586200 scala>format.format(new...

Python开发利器WingIDE破解方法

“工欲善其事,必先利其器。”刚开始接触Python的人大都用自带的LDLE,尽管它对于初学该语言非常有帮助,但许多开发人员更喜欢其它文本编辑器或集成开发环境。(IDEs)在此我不想展开阐述,Python 社区维护了一份Python 相关编辑器的清单, 涵盖了各种各样支持平台和软件许可协议。但是所给出的编辑器个人认为都不是很理想,一直想找一个类似于php的Z...