我需要创建一个以管理员权限运行的NSIS安装程序。我用
请求这些权限RequestExecutionLevel admin
到目前为止这是有效的。但我还需要在用户桌面上放置快捷方式链接。我不想为所有用户创建快捷方式,只为当前登录的用户创建快捷方式。所以我用
SetShellVarContext current
在安装程序部分中。如果当前用户具有管理员权限,则此方法有效。如果我有普通用户,Windows(7)会要求特权用户的凭据,这也是正确的。但是,安装程序会在特权用户桌面上创建图标,而不是在当前用户上创建图标。
那么,我如何告诉NSIS,如果她没有管理员权限,它应该为当前用户创建桌面图标?
仅供参考,如果我省略了RequestExecutionLevel和SetShellVarContext,我也会被提示输入管理权限,但安装程序会在当前用户桌面和admin用户上创建图标。我认为这是一种兼容行为。
答案 0 :(得分:2)
你真的不应该这样做(因为这个确切的问题)而且你基本上都在询问如何创建一个被设计破坏的安装程序。这不是NSIS特定的问题,甚至不是UAC特有的,它已经存在,因为在Win2000中添加了runas!使用runas / UAC进行提升时,新进程将以该用户及其HKCU和shell文件夹执行...
如果您的脚本中需要“RequestExecutionLevel admin”,那么您正在进行机器级别的操作,因此应调用“SetShellVarContext all”并将文件安装在$ ProgramFiles中并在HKLM下编写卸载注册。这适用于任何版本的NT,而不仅仅是Vista + / UAC。 (大多数人忘记在NT4和NT5上测试为非管理员)
如果为所有用户创建快捷方式是一个很大的问题,那么我建议您在startmenu页面上启用“不要创建快捷方式”复选框,以便用户自行决定。
如果您仍想强制破坏行为,则需要使用this plugin。 (您应该能够在NSIS forum)
上找到关于此插件的大量主题