Vista下的程序运行权限比较严格,如题,想在安装程序安装完成后直接把exe的兼容性设为“以管理员权限运行此程序”,可是不知道对应的应该调用什么api? 是用inno setup制作的安装程序。 注: 
  本贴不讨论资源文件中加入 <requestedExecutionLevel level="requireAdministrator"/>的方法,即不直接修改EXE文件的方法。

解决方案 »

  1.   

    shellexecute函數指定以管理員身份打開就行
    《在Windows Vista下編寫安全的代碼》一書中提到過
      

  2.   

    shellexecute是直接就执行了,即时生效。我要的是设置了那个属性,但不即时生效,而是以后每次执行时生效。另,找到个英文的,不过有点不对主题
    http://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/161b6a47-c9cb-492e-b880-449cfeaf4868/
      

  3.   

    自己写了个小函数来判断UAC是否开启:function IsUACEnable :  Boolean;
    var
      EnableLUA: Cardinal;
    begin
      try
        if RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Policies\System',
           'EnableLUA', EnableLUA) then
        begin
          // 读取值成功
          Result := EnableLUA = 1;
        end;
      except
        Result := False;
      end;
    end;同时看到了以下有用的博文,通过修改注册表实现的正是本贴提出的要求:
    http://blogs.itecn.net/blogs/winvista/archive/2006/08/09/UACV3.aspx
    五种标识权限提升的方法
    Windows Vista并没有一种与生俱来的魔力,可以未卜先知某个应用程序是否应该运行在更高安全级别上。应用程序必须自己想办法通知Windows Vista它需要更高权限。有以下五种方法,让Windows Vista明白该应用程序需要提升权限:(1) Windows Vista可以智能识别安装程序,例如根据安装程序的文件名(包含install或者setup),还可以智能识别msi发布的安装包等等。可以做一个实验,如果修改其他某个应用程序的名字,例如将QQ.exe重命名为QQInstall.exe,运行它就会自动触发权限提升,原来UAC以为这是一个安装程序。(2) 在可执行文件的属性对话框、兼容性标签页里勾选“以管理员身份启动该程序”复选框。这等效于在HKCU \Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers注册表分支下添加键值,也相当于修改C:\Windows\AppPatch下的sysmain.sdb兼容性数据库。(3) 在程序的manifest文件或者内嵌的manifest信息里加入“level=highestAvaible”或者“level requireAdministrator”安全级别。(4) 鼠标右键单击应用程序,选择“用管理员帐户运行”菜单项。(5) 利用ACT(应用程序兼容性工具)为特定应用程序创建兼容性数据库,以便IT部门可以方便地在企业里部署兼容性设置。及
    http://blogs.itecn.net/blogs/winvista/archive/2006/07/21/2945.aspx
    修改UAC兼容性设置

    能不能修改SC命令的兼容性设置,让系统知道它需要管理员权限?
    但是打开SC命令的属性对话框,发现其兼容性设置被锁死,如下图所示,原因是SC命令属于系统内置的组件,这和Windows XP的情况一样。图2
    这里尝试修改注册表,试图绕过这个限制,把SC命令添加到系统的兼容性数据库中:
    (1) 打开regedit注册表编辑器,定位到以下注册表项:
    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
    (2) 新增一个字符串键值:
    名称必须设置为“C:\Windows\system32\sc.exe”
    并将其数值数据设置为“RUNASADMIN”
    提示 该注册表修改完全等效于如图2所示的兼容性设置,只是绕开了UI的限制。这以修改SC.exe的兼容性为例。
    谢谢各位的关注!