Installation 管理员级nsis安装程序需要为非特权用户创建图标

Installation 管理员级nsis安装程序需要为非特权用户创建图标,installation,nsis,Installation,Nsis,我需要创建一个NSIS安装程序,它以管理员权限运行。我请求这些特权 RequestExecutionLevel admin 到目前为止,这是可行的。但我还需要在用户桌面上放置快捷链接。我不想为所有用户创建快捷方式,只想为当前登录的用户创建快捷方式。所以我用 SetShellVarContext current 在安装程序部分。如果当前用户具有管理员权限,则此操作有效。如果我有一个普通用户,Windows(7)会请求特权用户的凭据,这也是正确的。但是安装程序会在特权用户桌面上创建图标,而不是

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

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

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

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


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

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

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

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


如果您仍然想要强制破坏行为,则需要使用。(您应该可以在上找到大量关于此插件的主题)

好的,谢谢您的澄清。我很恼火,因为大多数程序都允许在为所有用户安装图标或仅为本地用户安装图标之间进行选择。我想只有当安装程序由管理员用户运行时,这才有效。没错,这有点过时,但对于那些最终来到这里并想知道原因的人来说:这让我们更清楚地了解主题相关: