【问题标题】:NSIS Installer: Detect if RequestExecutionLevel did not workNSIS 安装程序:检测 RequestExecutionLevel 是否不起作用
【发布时间】:2015-04-20 16:04:23
【问题描述】:

我有

RequestExecutionLevel admin 

在我的 NSIS 脚本中。

问题是,如果 Windows UAC 设置为“从不通知”并且普通用户运行安装程序,则安装程序会在不请求权限的情况下尝试继续,并且在尝试修改安装程序时会失败并显示一条晦涩的消息。目录用户没有权限。

我想做的是快速失败并立即显示一个对话框,说“请以管理员身份运行”。

我尝试添加我发现的以下代码片段,但它总是失败,除非用户实际上是管理员(但不是具有管理员执行级别的普通用户)。

UserInfo::GetAccountType pop $0 ${If} $0 != "admin" MessageBox mb_iconstop "Administrator rights required!" SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED Quit ${EndIf}

【问题讨论】:

  • Windows 版本?您的注册表中 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下的 ConsentPromptBehaviorAdmin 和 ConsentPromptBehaviorUser 的值是多少?
  • 我知道现在实际发生了什么。即使用户使用右键 -> 以管理员身份运行,由于 UAC 是“从不通知”,它仍然会以普通用户身份运行程序。我的代码很好,但我将更改错误消息以表明这可能是他们的问题。

标签: windows nsis uac


【解决方案1】:

不存在具有管理员执行级别的普通用户。当非管理员想要提升权限时,他们必须使用管理员的凭据,并且新进程以该管理员而不是用户身份运行。这叫做Over The Shoulder海拔...

使用 UserInfo::GetAccountType 是正确的解决方案。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多