NSIS 安装程序:检测 RequestExecutionLevel 是否不起作用
NSIS Installer: Detect if RequestExecutionLevel did not work
我有
RequestExecutionLevel admin
在我的 NSIS 脚本中。
问题是,如果 Windows UAC 设置为 "never notify" 并且普通用户运行安装程序,安装程序无论如何都会尝试继续而不请求权限并在中途失败并显示一条模糊消息当它试图修改用户没有权限的目录时。
我想做的是快速失败并立即显示一个对话框说 "Please run as administrator"。
我尝试添加我发现的以下代码片段,但它总是失败,除非用户实际上是管理员(但不是具有管理员执行级别的普通用户)。
UserInfo::GetAccountType
pop [=11=]
${If} [=11=] != "admin"
MessageBox mb_iconstop "Administrator rights required!"
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
Quit
${EndIf}
没有管理员执行级别的普通用户。当非管理员想要提升权限时,他们必须使用管理员的凭据,并且新进程以该管理员而非用户的身份运行。这叫做Over The Shoulder海拔...
使用 UserInfo::GetAccountType 是正确的解决方案。
我有
RequestExecutionLevel admin
在我的 NSIS 脚本中。
问题是,如果 Windows UAC 设置为 "never notify" 并且普通用户运行安装程序,安装程序无论如何都会尝试继续而不请求权限并在中途失败并显示一条模糊消息当它试图修改用户没有权限的目录时。
我想做的是快速失败并立即显示一个对话框说 "Please run as administrator"。
我尝试添加我发现的以下代码片段,但它总是失败,除非用户实际上是管理员(但不是具有管理员执行级别的普通用户)。
UserInfo::GetAccountType
pop [=11=]
${If} [=11=] != "admin"
MessageBox mb_iconstop "Administrator rights required!"
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
Quit
${EndIf}
没有管理员执行级别的普通用户。当非管理员想要提升权限时,他们必须使用管理员的凭据,并且新进程以该管理员而非用户的身份运行。这叫做Over The Shoulder海拔...
使用 UserInfo::GetAccountType 是正确的解决方案。