管理员级别的 nsis 安装程序需要为非特权用户创建图标
Posted
技术标签:
【中文标题】管理员级别的 nsis 安装程序需要为非特权用户创建图标【英文标题】:admin level nsis installer needs to create icons for unprivileged user 【发布时间】:2012-08-13 09:32:02 【问题描述】:我需要创建一个以管理员权限运行的 NSIS 安装程序。我请求这些特权
RequestExecutionLevel admin
到目前为止,这是可行的。但我还需要在用户桌面上放置快捷方式链接。我不想为所有用户创建快捷方式,而只想为当前登录的用户创建快捷方式。所以我用
SetShellVarContext current
在安装程序部分。如果当前用户具有管理员权限,则此方法有效。如果我有一个普通用户,Windows (7) 会要求特权用户的凭据,这也是正确的。但安装程序随后会在特权用户桌面上创建图标,而不是在当前用户上。
那么,我如何告诉 NSIS,如果当前用户没有管理员权限,它应该为当前用户创建桌面图标?
仅供参考,如果我同时省略 RequestExecutionLevel 和 SetShellVarContext,系统还会提示我提供管理权限,但安装程序会在当前用户桌面和管理员用户上创建图标。我认为这是某种兼容性行为。
【问题讨论】:
相关:***.com/a/22481847 【参考方案1】:你不应该这样做(因为这个确切的问题),你基本上是在问如何创建一个被设计破坏的安装程序。这不是 NSIS 特有的问题,甚至也不是 UAC 特有的问题,它在 Win2000 中添加 runas 后就存在了!当您使用 runas/UAC 提升时,新进程将作为该用户及其 HKCU 和 shell 文件夹执行...
如果您在脚本中需要“RequestExecutionLevel admin”,那么您正在执行机器级别的操作,因此应该调用“SetShellVarContext all”并在 $ProgramFiles 中安装文件并在 HKLM 下编写卸载注册。这适用于任何版本的 NT,而不仅仅是 Vista+/UAC。 (大多数人忘记在 NT4 和 NT5 上以非管理员身份进行测试)
如果为所有用户创建快捷方式是个大问题,那么我建议您启用开始菜单页面上的“不创建快捷方式”复选框,以便用户自行决定。
如果你仍然想强制破坏行为,那么你需要使用this plugin。 (你应该可以在NSIS forum 找到很多关于这个插件的话题)
【讨论】:
好的,感谢您的澄清。我很生气,因为大多数程序都允许在为所有用户安装图标或仅为本地用户安装图标之间进行选择。我想这只有在安装程序由管理员用户运行时才有效。 没错,这有点陈旧,但对于那些确实来到这里并想知道为什么的人:this answer, especially the last sentence 对这个主题有了更多的了解以上是关于管理员级别的 nsis 安装程序需要为非特权用户创建图标的主要内容,如果未能解决你的问题,请参考以下文章