3

我需要创建一个以管理员权限运行的 NSIS 安装程序。我请求这些特权

RequestExecutionLevel admin

到目前为止,这有效。但我还需要在用户桌面上放置快捷方式链接。我不想为所有用户创建快捷方式,而只想为当前登录的用户创建快捷方式。所以我用

SetShellVarContext current 

在安装程序部分。如果当前用户具有管理员权限,则此方法有效。如果我有一个普通用户,Windows (7) 会要求特权用户的凭据,这也是正确的。但安装程序随后会在特权用户桌面上创建图标,而不是在当前用户上。

那么,我如何告诉 NSIS,如果当前用户没有管理员权限,它应该为当前用户创建桌面图标?

仅供参考,如果我同时省略 RequestExecutionLevel 和 SetShellVarContext,我还会提示我提供管理权限,但安装程序会在当前用户桌面以及管理员用户上创建图标。我认为这是某种兼容性行为。

4

1 回答 1

2

你真的不应该这样做(因为这个确切的问题),你基本上是在问如何创建一个被设计破坏的安装程序。这不是特定于 NSIS 的问题,甚至不是特定于 UAC 的问题,它在 Win2000 中添加 runas 后就存在了!当您使用 runas/UAC 提升时,新进程将作为该用户及其 HKCU 和 shell 文件夹执行...

如果您在脚本中需要“RequestExecutionLevel admin”,那么您正在执行机器级别的操作,因此应该调用“SetShellVarContext all”并将文件安装在 $ProgramFiles 中并在 HKLM 下编写卸载注册。这适用于任何版本的 NT,而不仅仅是 Vista+/UAC。(大多数人忘记在 NT4 和 NT5 上以非管理员身份进行测试)

如果为所有用户创建快捷方式是一个大问题,那么我建议您启用开始菜单页面上的“不创建快捷方式”复选框,以便用户可以决定。

如果你仍然想强制破坏行为,那么你需要使用这个插件(你应该可以在NSIS 论坛上找到很多关于这个插件的主题)

于 2012-08-13T10:14:24.363 回答