gpt4 book ai didi

nsis - 您如何使用 NSIS 请求管理员权限?

转载 作者:行者123 更新时间:2023-12-04 01:40:21 74 4
gpt4 key购买 nike

我对 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”或其他方式)打开一个对话框,要求用户名和密码,检查凭据并仅在他们 checkout 时继续安装?

此外,我知道有一种方法可以设置安装程序,以便它带有漂亮的盾牌图标,让用户知道将请求管理员权限。有人知道怎么做吗?

任何帮助将不胜感激,因为这是目前唯一阻止我的应用程序部署的事情。

最佳答案

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 plug-in (使用有点复杂,让你的exe文件无法获得屏蔽覆盖图标)

我不认为 RunAs plug-in当 UAC 开启时,在 Vista+ 上正常工作,所以试图让它工作可能是死胡同...

recommended way获得屏蔽是在 exe list 中请求提升, RequestExecutionLevel admin这样做。如果您不使用 RequestExecutionLevel在您的安装程序脚本中完全没有 可能被检测为旧版安装程序,它也将获得屏蔽覆盖。

In Windows Vista, if an executable file requires elevation to launch, then the executable's icon should be "stamped" with a shield icon to indicate this fact. The executable's application manifest must mark "requireAdministrator" to designate the executable as requiring a full administrative access token. The shield icon overlay will also be automatically placed on executables that are deemed to require elevation as per the installer detection heuristics. For example, a file named setup.exe will automatically receive a shield icon overlay even if the executable does not have an embedded application manifest.

关于nsis - 您如何使用 NSIS 请求管理员权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8732019/

74 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com