存档

‘Delphi’ 类别的存档

Delphi@Vista(一):如何取得管理员权限

原创内容,如需转载,请联系作者:easy@mpnew.com
首先在考虑Vista的时候不要担心你的Delphi版本,其实即使是Delphi 5 (更低版本的我没有测试过)编译的软件都可以很好的在Vista下运行。虽然有很多人在骂Vista的UAC,无论它现在运作的好不好,但从计算机管理的角度来说,它确实是会让你的计算机更加安全,因此关于管理员权限方面,我希望大家在这样做之前先了解“我为什么这样做,什么时候需要这样做?”,而不是简单的提供一个例子,就让你的所有程序都运行在管理员权限下,看似很酷,但不一定能真的解决问题。

其实很多时候我们并不需要管理员权限,特别是那些功能很简单的信息管理软件或者是网络通信(即时通信)类的软件来说基本上是不可能用到管理员权限的,如果你的程序非管理员权限不可,那么建议首先建立一份软件需要访问的资源列表,包括需要访问的目录、文件、注册表项等,然后逐一检查这些资源的所有者,如果它“应该”是你的,但你却访问不了,那么问题应当在你的安装程序或者安装方法上有问题。如果这些资源确实不是你建立或者安装的,而且你的应用也确实需要访问这些资源,那才真的需要考虑管理员权限问题。而且你需要知道一只必须管理员权限的程序有很多麻烦:
1、每次运行时会弹出很难看的UAC警告
2、你的程序写到启动组或注册表run键值里后不会生效
3、你按以前方法建立的子进程都是管理员权限,这可能会被恶意软件所利用

如果你不担心以上问题,或者你的程序根本就是一个系统工具或者安装程序,那么其实很简单,你只需要:
1、建立一个名为manifest.xml的文件,内容如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<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>

注意保存的时候使用utf-8无BOM格式,并且以上全为半角字符,不知道为何BLOG程序会将部分引号转换为全角。

2、建立一个资源文件manifest.rc,内容如下:
1 24 manifest.xml
3、编译资源文件:
Brcc32.EXE manifest.rc
4、在项目文件中包含这个资源:
{$R manifest.res}

如果你使用的是Delphi 2007版本的话,会因为原来的项目资源文件中已经包含了一个manifest资源而无法编译通过,这时可以直接把图标、版本信息等资源加到新的manifest.rc文件中,并把原来的资源文件删除即可。