我对 NSIS 还很陌生。
我试图请求管理员权限才能运行安装程序,因为它与注册表有点混乱。
我对“RequestExecutionLevel”和“MULTIUSER_EXECUTIONLEVEL”的问题是,它们都绝对阻止任何非管理员用户打开安装程序,即使在上下文菜单中选择“以管理员身份运行”也是如此。
我尝试过使用 RunAs DLL,但我还没有找到一个线程来说明将什么内容放入传递给“RunAsW”函数的 $command 变量中。
这是我的(相当混乱的)代码:
StrCpy $0 0
StrCpy $1 ""
System::Call 'RunAs::GetAdministrators(w r1, *i .r0) i .r2 ? u'
System::Alloc 64
Pop $4
StrCpy $4 $2
StrCpy $5 ""
loop:
IntCmp $0 0 endloop
System::Call '*$4(w .r3)'
StrCpy $5 "$5|$3"
endloop:
System::Free $4 ; we free the memory used by the array
StrCpy $5 "$5" "" 1
!insertmacro MUI_INSTALLOPTIONS_WRITE "Settings.ini" "Field 1" "ListItems" $5
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "Settings.ini"
!insertmacro MUI_INSTALLOPTIONS_READ $1 "UserPass" "Field 1" "State"
!insertmacro MUI_INSTALLOPTIONS_READ $2 "Settings.ini" "Field 2" "State"
StrCpy $3 "%%LOGONSERVER%%"
StrCpy $3 0
StrCpy $4 0
System::Call 'RunAs::RunAsW(w r1, w r2, w r3, *w .r4) i .r0 ? u'
MessageBox MB_OK $0
IntCmp $0 1 success
Quit
success:
!insertmacro MUI_LANGDLL_DISPLAY
其中很多只是猜测和反复试验。 (顺便说一句 - 我还尝试通过循环运行来获取所有管理员,但 DLL 似乎仅适用于 32 位计算机,所以......)。
无论如何,我的问题是:
有谁知道一种方法(使用“RunAs”或其他方式)打开一个请求用户名和密码的对话框,检查凭据并仅在检查后继续安装?
另外,我知道有一种方法可以设置安装程序,以便它带有漂亮的盾牌图标,让用户知道将请求管理员权限。有人知道该怎么做吗?
任何帮助将非常感激,因为这是目前阻止我的应用程序部署的唯一原因。
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 InstFiles
Section
SectionEnd
是我通常推荐的基本代码,以确保安装程序以管理员身份运行。
恕我直言,除非安装过程的一部分需要管理员访问权限,而另一部分需要访问用户配置文件,否则在自定义页面上提示输入凭据是没有意义的。如果这适用于您,那么您应该看看UAC插件 http://nsis.sourceforge.net/UAC_plug-in(使用起来有点复杂,导致你的exe文件无法获取屏蔽覆盖图标)
我不认为运行方式插件 http://nsis.sourceforge.net/NSIS-RunAs当 UAC 打开时,它可以在 Vista+ 上正常工作,因此尝试让它工作可能是一个死胡同......
The 推荐方式 http://msdn.microsoft.com/en-us/library/bb530410.aspx要获得防护罩,请在 exe 清单中请求提升,RequestExecutionLevel admin
这样做。如果你不使用RequestExecutionLevel
完全在您的安装程序脚本中might被检测为旧版安装程序,并且它还将获得屏蔽覆盖层。
在 Windows Vista 中,如果可执行文件需要提升才能启动,
那么可执行文件的图标应该用盾牌图标“标记”
表明这一事实。可执行文件的应用程序清单必须标记
“requireAdministrator”指定可执行文件需要完整的
管理访问令牌。盾牌图标覆盖也将是
自动放置在被认为需要的可执行文件上
根据安装程序检测启发式的标高。例如,一个
名为 setup.exe 的文件将自动接收盾牌图标覆盖层
即使可执行文件没有嵌入式应用程序清单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)