如何在electron-builder的NSIS安装包中嵌入额外的文本文件
解决方法
步骤1:配置electron-builder关联自定义NSIS脚本
在项目的package.json的build配置项下添加NSIS相关配置,指定你的自定义脚本路径:
{ "build": { // 其他electron-builder原有配置保持不变 "nsis": { "oneClick": false, "perMachine": false, "allowElevation": true, "script": "./custom-installer.nsi" // 替换为你自己的NSIS脚本文件路径 } } }
步骤2:修改NSIS脚本逻辑
你当前代码的问题是直接读取编译时本地的项目路径,该路径在用户设备上不存在。需要先把文本文件打包进安装包,安装时释放到临时目录再读取,修改后的代码如下:
nsDialogs::CreateControl "RichEdit20A" ${__NSD_Text_STYLE}|${ES_MULTILINE}|${WS_VSCROLL}|${WS_HSCROLL}|${ES_READONLY} ${__NSD_Text_EXSTYLE} 0 0 100% 112u "" Pop $0 ; 新增:将本地文本文件打包进安装包,安装时释放到NSIS专用临时目录 File /oname=$PLUGINSDIR/textFile.txt "${PROJECT_DIR}\textFile.txt" ; 修改:读取临时目录下的文本文件 FileOpen $4 "$PLUGINSDIR/textFile.txt" r loop: FileRead $4 $1 SendMessage $0 ${EM_REPLACESEL} 0 "STR:$1" IfErrors +1 loop FileClose $4
说明
File是NSIS内置指令,作用是将编译时本地路径的文件打包进安装包,/oname参数指定安装时释放的路径$PLUGINSDIR是NSIS安装过程中的专用临时目录,安装完成后会自动清理,不需要手动删除- 如果你项目里的文本文件不在
${PROJECT_DIR}根目录,替换为实际的编译时绝对路径即可,也可以使用electron-builder内置的${BUILD_RESOURCES_DIR}变量指向项目的build资源目录 - 如果你的文本文件是UTF-8编码,需要在
FileOpen指令后添加UTF8参数,避免读取时出现乱码:FileOpen $4 "$PLUGINSDIR/textFile.txt" r UTF8
内容的提问来源于stack exchange,提问作者Zachary C.
相关产品推荐
相关产品推荐

