让安装程序在Windows启动时为一个用户创建一个自动运行快捷方式

时间:2018-01-18 09:28:07

标签: windows nsis

我有一个安装我的应用程序的NSIS安装程序,它在Startup文件夹中创建了一个快捷方式(允许我的应用程序在Windows启动时启动。

;Create Auto Startup Shortcut
CreateShortCut "$SMSTARTUP\my_app.lnk" "$INSTDIR\Bin\my_app.exe"

但是,现在我的应用程序会自动启动所有登录计算机的用户。我只希望它为安装该应用程序的用户自动运行。

2 个答案:

答案 0 :(得分:0)

NSIS令人困惑地打电话给"当前用户"选项MultiUser,如" MultiUser.nsh"。无论如何,这个脚本(当使用MULTIUSER_EXECUTIONLEVEL=Standard运行时)将允许您仅为当前用户安装。

答案 1 :(得分:0)

有两种类型的安装方案

  1. 仅为当前用户安装内容。
  2. 为机器上的每个用户安装一些东西。
  3. 在NSIS中,您可以通过

    执行当前/单用户模式
    • RequestExecutionLevel user添加到脚本中。
    • 只写入注册处的HKCU部分。
    • 将应用程序安装到$ LocalAppData \ Programs。

    按机器/共享/所有用户模式

    • RequestExecutionLevel adminSetShellVarContext all添加到脚本中。
    • 只写入HKLM / HKCR部分的注册表。
    • 将应用程序安装到$ ProgramFiles。
    • 写入HKCU或用户个人资料的任何部分。

    在NSIS中,某些路径常量(如$ SMPrograms)受SetShellVarContext指令的影响,它可用于在用户和共享/机器文件夹路径之间切换。但是,您应始终将其与您正在进行的安装类型相匹配,因为UAC可能导致安装程序以“错误用户”身份运行,而非管理员用户无法对共享文件夹具有写入权限。

    MultiUser.nsh尝试为您提供在运行时选择模式的方法,但您必须小心,因为您不希望在执行共享安装时为单个用户执行操作。

    如果要为所有用户安装,则安装程序无法设置每用户启动快捷方式,必须由用户执行时完成。

    如果您不关心因为UAC而错误运行的用户,您可以更改为用户文件夹常量:

    SetShellVarContext user ; Force per-user folder constants
    CreateShortcut "$SMSTARTUP\my_app.lnk" "$INSTDIR\Bin\my_app.exe"