基于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
代码解释
-
宏定义:
-
!define DIR_NAME "myApp":定义了一个宏DIR_NAME,其值为"myApp"。
-
-
函数定义:
-
Function .onVerifyInstDir:定义了一个名为.onVerifyInstDir的函数。
-
-
获取目录名称长度:
-
StrLen $0 "${DIR_NAME}":计算宏DIR_NAME的长度,并将结果存储在变量$0中。这里${DIR_NAME}会被替换为"myApp",所以$0的值为5。
-
-
截取安装目录的末尾部分:
-
StrCpy $1 "$INSTDIR" "" -$0:从$INSTDIR的末尾截取长度为$0的子字符串,并将结果存储在变量$1中。例如,如果$INSTDIR是C:\Program Files,那么$1将是Files。
-
-
比较安装目录的末尾部分:
-
StrCmp $INSTDIR "${DIR_NAME}" +2 0:比较$INSTDIR和${DIR_NAME}(即"myApp")。如果相等,则跳过接下来的两行代码(即+2),否则执行下一行代码(即0)。
-
-
调整安装目录:
-
StrCpy $INSTDIR "$INSTDIR${DIR_NAME}":如果$INSTDIR不以"myApp"结尾,则在$INSTDIR的末尾添加\myApp。例如,如果$INSTDIR是C:\Program Files,则将其修改为C:\Program Files\myApp。
-
-
结束函数:
FunctionEnd:结束.onVerifyInstDir函数。
解释
-
A[开始] :函数开始。
-
B[获取目录名称长度] :计算
DIR_NAME的长度。 -
C[截取安装目录末尾部分] :从
$INSTDIR的末尾截取与DIR_NAME长度相同的子字符串。 -
D[比较安装目录末尾部分] :比较
$INSTDIR的末尾部分是否等于DIR_NAME。 -
E[调整安装目录] :如果
$INSTDIR的末尾部分不等于DIR_NAME,则在$INSTDIR的末尾添加DIR_NAME。 -
F[结束] :函数结束。
通过这段代码,NSIS 确保安装目录始终以 myApp 结尾,从而避免安装目录路径不一致的问题。
搜了半天才找到这块代码