You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Electron Builder NSIS安装程序:创建开机启动快捷方式及后置代码位置

解决Electron Builder NSIS安装包的两个问题

嘿,刚好我之前做过类似的配置,给你一步步说明怎么实现:

1. 在开机启动菜单创建快捷方式

要给Windows开机启动目录添加快捷方式,通过Electron Builder的自定义NSIS脚本就能轻松搞定:

步骤1:配置package.json

在项目的package.jsonbuild字段里,给NSIS指定自定义脚本路径:

{
  "build": {
    "win": {
      "target": "nsis"
    },
    "nsis": {
      "include": "./scripts/installer.nsh", // 指向你的自定义NSIS脚本
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "shortcutName": "你的应用名称"
    }
  }
}

步骤2:编写自定义NSIS脚本

在项目根目录创建scripts/installer.nsh文件,添加以下代码:

; 安装成功后执行的逻辑 - 添加开机启动快捷方式
Function .onInstSuccess
  ; 获取Windows开机启动目录的路径
  StrCpy $startupDir "$APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
  ; 创建快捷方式到启动目录,这里用Electron Builder预定义的变量,不用硬编码路径
  CreateShortcut "$startupDir\${APP_NAME}.lnk" "$INSTDIR\${APP_EXECUTABLE}" "" "$INSTDIR\${APP_ICON}" 0
FunctionEnd

; 卸载时删除开机启动快捷方式,避免残留
Function .onUninstSuccess
  StrCpy $startupDir "$APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
  Delete "$startupDir\${APP_NAME}.lnk"
FunctionEnd

这里的${APP_NAME}${APP_EXECUTABLE}${APP_ICON}都是Electron Builder自动注入的变量,对应你的应用名称、主程序路径和图标路径,不用自己手动写死路径。

2. 安装完成后执行代码的位置

安装完成后的代码执行分两种场景,看你需要哪种:

场景1:NSIS安装器层面执行代码

直接在上面的.onInstSuccess函数里写逻辑就行,比如执行批处理、调用外部工具,或者做一些系统配置:

Function .onInstSuccess
  ; 示例:执行安装目录下的post-install.bat脚本
  ExecWait '"$INSTDIR\post-install.bat"'
  ; 或者直接执行命令行指令
  ExecWait "echo 安装完成! >> $INSTDIR\install-log.txt"
FunctionEnd

场景2:启动你的Electron应用并执行特定逻辑

如果是想在安装完成后启动应用,并且让应用执行初始化操作,你可以:

  • 先在package.jsonnsis配置里开启runAfterFinish: true,这样安装完成后会自动启动应用;
  • 然后在Electron主进程里,通过命令行参数判断是否是首次启动(比如安装器启动时传递--post-install参数),然后执行对应逻辑:
// 主进程main.js
const { app } = require('electron');

app.whenReady().then(() => {
  const isPostInstall = process.argv.includes('--post-install');
  if (isPostInstall) {
    // 这里写安装完成后要执行的应用内逻辑,比如打开欢迎页面
    console.log('执行安装后初始化操作');
  }
});

要传递这个参数的话,需要在自定义NSIS脚本里修改启动命令:

Function .onInstSuccess
  ; 启动应用并传递--post-install参数
  ExecWait '"$INSTDIR\${APP_EXECUTABLE}" --post-install'
FunctionEnd

另外,如果你只是想简单启动应用,直接在package.jsonnsis里设置runAfterFinish: true就够了,不需要额外写脚本。

内容的提问来源于stack exchange,提问作者LonsomeHell

火山引擎 最新活动