2012-01-11 551 views
7

我有一个NSIS脚本,可以很好地处理大型应用程序。我已经在网络上读了很多线程,但无法得到明确的答案:是否可以使用NSIS安装应用程序,该应用程序在启动时(不管用户类型)自动以管理员身份运行?如果这是可能的话,它如何实现?NSIS:安装应用程序以始终以管理员身份运行

注:我已经实行了NSIS封装必须为admin使用运行

RequestExecutionLevel admin 

我试图用这个method写UAC要求的应用程序的注册表项,但我不能让RUNASADMIN命令因为它不符合NSIS所要求的格式。

回答

17

为了确保安装程序以管理员身份运行通常我建议这个小例子:

Outfile RequireAdmin.exe 
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) 

!include LogicLib.nsh 

Function .onInit 
UserInfo::GetAccountType 
pop $0 
${If} $0 != "admin" ;Require admin rights on NT4+ 
    MessageBox mb_iconstop "Administrator rights required!" 
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED 
    Quit 
${EndIf} 
FunctionEnd 

Page InstFile 

Section 
SectionEnd 

安装的应用程序应该执行类似的步骤,如果它总是需要以管理员身份运行,对于一个Win32应用程序,这将是:

如果通过“自动以管理员身份运行”,您的意思是绕过UAC标高,那么不是真的不可能,UAC的整点是允许用户确认/拒绝特权操作!一些应用程序通过安装一个NT服务来解决这个问题,该服务代表应用程序执行他们需要的任何操作。我不会推荐这样做,因为它将服务填充到用户机器中,并且如果服务编码不正确,可能会削弱系统的安全性。

如果您没有编写您正在安装的应用程序,那么您的选项会受到一些限制。如果应用程序根本没有清单,则可以使用清单。

在AppCompatFlags键下设置RUNASADMIN字符串并不是安装程序应该做的事情,这些兼容性选项应该由用户控制,而不是应用程序。

您链接到也告诉你twoways设置SLDF_RUNAS_USER标志上的快捷方式的论坛主题,这不会确保应用程序在所有情况下,开始作为管理员,只有当应用程序从快捷方式启动,但它可能是你唯一的选择,如果你不能改变应用程序本身...

+0

感谢您的时间。真的很好的回答... – MoonKnight 2012-01-17 10:07:59

+0

事实上是光辉的! – MoonKnight 2012-01-17 10:09:18

相关问题