NSIS:如何基于选定的语言加载不同的许可证文件

问题描述 投票:0回答:2

我试着用电子构建器制作NSIS安装程序。我需要根据用户根据选定的语言显示不同的许可证文件。

package.json

"devDependencies": { "electron": "22.0.1", "electron-builder": "^23.6.0" }, "build": { "directories": { "output": "out" }, "win": { "target": "nsis", "icon": "images/logo.ico" }, "nsis": { "oneClick": false, "deleteAppDataOnUninstall": true, "uninstallerIcon": "images/logo.ico", "installerIcon": "images/logo.ico", "displayLanguageSelector": true, "installerLanguages": ["en_US", "bg_BG"], "multiLanguageInstaller": true, "perMachine": true, "include": "build/preInstall.nsh" } } }

Preinstall.nsh

!include MUI2.nsh !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE $(translatedlicensefile) !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE English LicenseLangString translatedlicensefile ${LANG_ENGLISH} "build/license/license_en.txt" !insertmacro MUI_LANGUAGE Bulgarian LicenseLangString translatedlicensefile ${LANG_BULGARIAN} "build/license/license_bg.txt"
发生此错误:

Error output: LicenseLangString: open failed "build/license/license_en.txt" Usage: LicenseLangString name lang_id|0 license_path !include: error in script: "/Users/..../preInstall.nsh" on line 32 Error in script "<stdin>" on line 51 -- aborting creation process
线32是

LicenseLangString translatedlicensefile ${LANG_ENGLISH} "build/license/license_en.txt"
我尝试了许多示例,包括官方的示例,并想使用电子构建器弄乱了NSIS脚本的流程,但此时我无法包括任何修改。

提前感谢

i我找到了将许可证文件直接加载到NSIS代码中的解决方法。这不是一个好习惯,而是仍在寻找更好的解决方案。
electron nsis electron-builder
2个回答
0
投票
Node_modules/app-builder-lib/out/targets/nsis/nsislicense.js

const licenseFiles = await license_1.getLicenseFiles(packager); // --> workaround let license_bg = {file: packager.projectDir + "/pages/license_bg.txt", lang:"bg", langWithRegion:"bg_BG", langName:"Bulgarian"}; let license_en = {file: packager.projectDir + "/pages/license_en.txt", lang:"en", langWithRegion:"en_US", langName:"English"}; licenseFiles.push(license_el); licenseFiles.push(license_en); // <-- workaround // if (licenseFiles.length === 0) { // return; // }

那是对我有用的。
I放置了

0
投票

LICENSE_RU.RTF

to ./build文件夹(相对于Project root Directory) - 事实证明这很重要。并将它们添加到额外文件列表中,如下所示。

package.json "build": { . . . "extraFiles": [ "license_en.rtf", "license_ru.rtf" ], "nsis": { . . . "displayLanguageSelector": true, "installerLanguages": ["en_US", "ru_RU"], "multiLanguageInstaller": true } }

根据

Electron-Builder的源代码,您可以使用.rtf,.txt和.html来使自动化起作用。 P.S:电子构建器VER。 25.1.8

	

© www.soinside.com 2019 - 2025. All rights reserved.