我们知道windows有那几个账户类型:标准账户和管理员账户。标准账户可以使用大多数软件,以及更改那些不影响其它用户和计算机安全信息的设置。管理员账户则可以完全控制计算机的访问,做任何修改。当做出一些影响其它用户或系统效率时,会弹出是否允许这个操作的窗口。
在windows vista中,所有的管理员在登录计算机时,都会得到两个访问令牌:一个是筛选后的标准用户访问令牌,另一个是完整的管理员访问令牌。默认情况下,所有用户(包括管理员)都以标准用户登录到计算机。那么,当你执行一些安装程序,或操作一些影响其它用户或系统安全、效率等方面的动作时,系统就会提出’是否运行’对话框。我的一个程序在执行的过程中就出现了异常对话框。在我的程序中操作了windows service,对一个windows service进行了开启和关闭的操作。结果,弹出出一个异常对话框,大概意思是说我没有足够的权限。我的这个可执行程序是通过一个安装程序添加到计算机上的,这个windows service也是在安装程序中添加的,这些操作都会在program files文件夹和注册表中执行一些操作,而这些操作必须要有管理员权限,所以标准用户执行时就会出错。所以如果开发一些在windows vista/win7上的install程序,请确保添加了application mainfest文件,并且在application mainfest文件中设置适当的requestedExecutionLevel元素值,默认的是asInvoke。
application mainfest文件中的requestedExecutionLevel元素是将UAC的信息嵌入到清单中,它是如下格式:
<requestedExecutionLevel level='asInvoke|requeireAdministrator|highestAvailable' uiAccess='true|false'/>
asInvoke:表示应用程序将使用与启用它的进程相同的权限
requireAdministrator:表示应用程序将使用管理员权限运行。如果打开进程未使用管理权限运行,则它会弹出提示
highestAvailable:表示使用最高权限级别运行。
uiAccess:表示应用程序希望绕过用户界面保护级别并将输入引导到桌面上的更高权限窗口(不明白)。
可以参看下面http://www.cnblogs.com/boyliupan/archive/2011/01/17/1937518.html这个链接的解释。