electron-builder 选择安装目录后保留文件夹名称

242 阅读1分钟

基于electron-vite模版创建的项目

在build目录新建文件installer.nsh

Vscode 需要安装 NSIS 扩展才可以代码高亮

!define DIR_NAME "myApp"

Function .onVerifyInstDir
  StrLen $0 "${DIR_NAME}"
  StrCpy $1 "$INSTDIR" "" -$0
  StrCmp $1 "${DIR_NAME}" +2 0
  StrCpy $INSTDIR "$INSTDIR${DIR_NAME}"
FunctionEnd

在electron-builder.yml配置

nsis:
  oneClick: false
  allowToChangeInstallationDirectory: true
  include: build/installer.nsh
  artifactName: ${name}-${version}-setup.${ext}
  shortcutName: ${productName}
  uninstallDisplayName: ${productName}
  createDesktopShortcut: always

代码解释

  1. 宏定义

    1. !define DIR_NAME "myApp":定义了一个宏 DIR_NAME,其值为 "myApp"

  2. 函数定义

    1. Function .onVerifyInstDir:定义了一个名为 .onVerifyInstDir 的函数。

  3. 获取目录名称长度

    1. StrLen $0 "${DIR_NAME}":计算宏 DIR_NAME 的长度,并将结果存储在变量 $0 中。这里 ${DIR_NAME} 会被替换为 "myApp",所以 $0 的值为 5

  4. 截取安装目录的末尾部分

    1. StrCpy $1 "$INSTDIR" "" -$0:从 $INSTDIR 的末尾截取长度为 $0 的子字符串,并将结果存储在变量 $1 中。例如,如果 $INSTDIRC:\Program Files,那么 $1 将是 Files

  5. 比较安装目录的末尾部分

    1. StrCmp $INSTDIR "${DIR_NAME}" +2 0:比较 $INSTDIR${DIR_NAME}(即 "myApp")。如果相等,则跳过接下来的两行代码(即 +2),否则执行下一行代码(即 0)。

  6. 调整安装目录

    1. StrCpy $INSTDIR "$INSTDIR${DIR_NAME}":如果 $INSTDIR 不以 "myApp" 结尾,则在 $INSTDIR 的末尾添加 \myApp。例如,如果 $INSTDIRC:\Program Files,则将其修改为 C:\Program Files\myApp

  7. 结束函数

    1. FunctionEnd:结束 .onVerifyInstDir 函数。

解释

  • A[开始] :函数开始。

  • B[获取目录名称长度] :计算 DIR_NAME 的长度。

  • C[截取安装目录末尾部分] :从 $INSTDIR 的末尾截取与 DIR_NAME 长度相同的子字符串。

  • D[比较安装目录末尾部分] :比较 $INSTDIR 的末尾部分是否等于 DIR_NAME

  • E[调整安装目录] :如果 $INSTDIR 的末尾部分不等于 DIR_NAME,则在 $INSTDIR 的末尾添加 DIR_NAME

  • F[结束] :函数结束。

通过这段代码,NSIS 确保安装目录始终以 myApp 结尾,从而避免安装目录路径不一致的问题。

搜了半天才找到这块代码

来源:www.jianshu.com/p/cea38eb17…