大家都知道
VISTA
中的
UAC
机制。很烦,动不动就来个提示。装软件也慢慢检查,慢的要命。有的人干脆把它关掉了事,可是有人却喜欢用。所以做软件开发的要兼顾两种用户,就必须使其开发的程序能在
UAC
开启的状态下能正常的安装和运行。
言归正传,先说说程序要在
VISTA
下运行,开发时应注意的几个问题
<!--[if !supportLists]-->1. <!--[endif]-->有注册表操作时,不要修改HKEY_LOCAL_MACHINE里面的项,而把要写入注册表的项,写到HKEY_CURRENT_USER里面。
<!--[if !supportLists]-->2. <!--[endif]-->安装文件到Program Files下,但是不要把程序运行是要修改的文件放到该目录下,而把程序经常读写的文件放到Appdata目录下 (xp下位于\Documents and Settings\用户\Local Settings\Application Data)
软件安装运行,需要权限。下面总结一下提示权限的几个方法:
<!--[if !supportLists]-->1. <!--[endif]-->这个方法最简单:把要安装或者运行的程序改名,名称中含有”setup”,”install”,”update”时,VISTA系统会自动提升其权限。
<!--[if !supportLists]-->2. <!--[endif]-->加上manifest文件。内容是
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="IsUserAdmin"
<--------
你的程序名
type="win32"/>
<description>Description of your application</description>
<--------
你的程序描述
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator" <--------
权限
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
存为 你的程序名.exe.manifest 。
C/C++
中可以把这个内容嵌入到程序里。嵌入后的程序在
VISTA
中可以看到图标的右下角有一个小盾牌。具体步骤是,在添加资源时选择
customer,
编号一定要填
24
,然后把这个文件贴到里面,把资源的
ID
改为
1.
编译即可。注意要修改程序名和权限。三种权限
asInvoker ,highestAvailabl, requireAdministrator
这里不具体介绍,网上很多资料。
C#, J# and Visual Basic
里面好像不可以直接把该
XML
文件作为资源文件放到
exe
里面,要用
VS
里带的工具
mt
,
(
开始菜单中找
)
具体步骤,进入
VS
的命令提示窗口
,输入命令
mt.exe –manifest temp.manifest –outputresource:YourApp.exe;#1
.
即可把该
manifest
加入
exe
,注意
:
该方法对安装包不起作用。安装包另有办法。一会介绍。
安装包的部分问题和解决办法。
如果安装包里要写注册表,或者注册
DLL
组件,有可能会权限不够。我在做的时候遇到的问题是把注册
dll
的程序(单独写的)放到
installsheild
安装包里调用,权限不够,这个程序运行的时候,注册不了组件。给这个小程序加上
manifest
后放到打包文件里面去后,它不运行,不知道为什么。给安装包改名加上
”install”/”setup”
都不管用。郁闷了很久,终于找到解决办法:
用小工具
ResHacker <!--[if !vml]--><!--[endif]-->
(
一个可以修改
EXE/DLL
资源的小程序
)
,打开打包后的文件,找到一个名为
24
的项,打开,之后有为
1
的目录,点开,右边就会出现一些脚本,找到
<requestedPrivileges>
<requestedExecutionLevel
level="
asInvoker
"
(就是这里)
uiAccess="false"/>
</requestedPrivileges>
</security>
地方,改为
level="requireAdministrator"
。点编辑脚本,然后文件
à
保存就可以了,
<!--[if !vml]--><!--[endif]-->
在你打开的那个文件目录里面多了一个文件, youAppName_original.exe是原文件,youAppName.exe是改过的文件。改过的文件放到vista下就可以看到小盾牌了。权限提升成功,这样运行后,它里面调用的exe就有权限了,可以注册文件,修改注册表。
2007年10月8号补充,做安装包时就可以更改权限了,不需要像上面说的那么麻烦。在InstallShield的打包部分,Installation Designer->Release->Required Execution Level 选择Administrator就可以了
有看不明白的地方,欢迎来信 wangdl5201314@163.com QQ:56320367