如何将第三方可执行文件置于Electron应用安装目录根目录?
解决Electron Builder打包时第三方可执行文件无法外部访问的问题
我之前也碰到过一模一样的问题——asar打包会把所有应用文件塞进归档里,外部进程根本没法访问里面的可执行文件。用electron-builder的extraResources配置就能完美解决,让你的第三方程序直接放到安装后的应用根目录,同时不被asar打包。
具体配置修改步骤
1. 调整asar配置,排除第三方可执行文件
把你原来的"asar": true改成带排除规则的对象,确保这个可执行文件不会被打包进asar:
"asar": { "exclude": ["path/to/your/third-party-executable.exe"] }
这里的路径是相对于你的app目录的,比如如果你的可执行文件在app/tools/xxx.exe,就写"tools/xxx.exe"。
2. 添加extraResources配置,指定文件输出位置
在build对象里新增extraResources数组,告诉electron-builder把这个文件复制到应用根目录:
"extraResources": [ { "from": "./app/path/to/your/third-party-executable.exe", "to": "./" } ]
from:源文件路径,相对于项目根目录to:目标路径,./代表安装后的应用根目录
3. 修改后的完整build配置示例
结合你提供的配置,修改后大概是这样:
"build": { "appId": "com.toutici.asd", "asar": { "exclude": ["path/to/your/third-party-executable.exe"] }, "extraResources": [ { "from": "./app/path/to/your/third-party-executable.exe", "to": "./" } ], "directories": { "app": "./app", "buildResources": "./build", "output": "./dist" }, "electronDownload": { "cache": ".electron", "verifyChecksum": true }, "electronVersion": "1.7.11", "fileAssociations": { "ext": "asd", "icon": "./www/assets/icon/win/icon.ico" }, "productName": "Android SMS Delimiter", "mac": { "category": "public.app-category.productivity", "target": [ "dmg", "mas" ], "icon": "./build/icon.icns" }, "dmg": { "contents": [ { "x": 110, "y": 150 }, { "x": 240, "y": 150, "type": "link", "path": "/Applications" } ] }, "deb": { "compression": "gz", "icon": "./build/background.png" }, "linux": { "target": [ "AppImage", "apk", "deb", "rpm", "snap", "tar.gz", "zip" ] }, "win": { "target": [ { "target": "nsis", "arch": [ "ia32" ] } ], "icon": "build/icon.ico" }, "nsis": { "oneClick": true, "perMachine": true, "allowElevation": true, "allowToChangeInstallationDirectory": false, "createDesktopShortcut": true, "runAfterFinish": true, "installerIcon": "./build/icon.ico" }, "portable": { "requestExecutionLevel": "user" }, "squirrelWindows": { "iconUrl": "./build/icon.ico", "loadingGif": "./build/install-spinner.gif", "msi": true } }
在代码中访问这个可执行文件
打包后,你需要用Electron的API获取应用安装目录,再拼接可执行文件的路径:
const path = require('path'); const { app } = require('electron'); // 获取应用程序所在目录(安装后的根目录) const appInstallDir = path.dirname(app.getPath('exe')); // 拼接第三方可执行文件的路径 const thirdPartyExePath = path.join(appInstallDir, 'third-party-executable.exe');
这样不管是Windows、macOS还是Linux,都能正确定位到这个可执行文件,外部进程也能正常访问它了。
内容的提问来源于stack exchange,提问作者davejoem
相关产品推荐
相关产品推荐

