admin level nsis安装程序需要为非特权用户创建图标

时间:2012-08-13 09:32:02

标签: installer nsis

我需要创建一个以管理员权限运行的NSIS安装程序。我用

请求这些权限
RequestExecutionLevel admin

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

SetShellVarContext current 

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

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

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

1 个答案:

答案 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

上找到关于此插件的大量主题