2015-04-20 39 views
1

NSIS安装程序:检测是否RequestExecutionLevel没有工作

RequestExecutionLevel admin 

在我NSIS脚本。

问题是,如果将Windows UAC设置为“从不通知”并且普通用户运行安装程序,则安装程序会尝试继续进行操作,而不会询问权限,并在尝试修改时中途显示一条模糊的消息目录用户没有权限。

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

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

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

+0

Windows版本?您的注册表中的ConsentPromptBehaviorAdmin和ConsentPromptBehaviorUser在HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System中的价值是什么? – Anders

+0

我明白现在发生了什么。即使用户使用右键单击 - >以管理员身份运行,由于UAC是“从不通知”,它仍然会像普通用户一样运行该程序。我有的代码很好,但我要更改错误消息以表明这可能是他们的问题。 – Will

回答

1

有没有这样的事情作为具有管理员执行级别普通用户。当非管理员想要提升时,他们必须使用管理员的凭据,并且新流程以此管理员身份运行,而不是用户。这称为Over The Shoulder海拔...

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

相关问题