electron 如何在电子应用程序中打包外部.exe文件

ltskdhd1  于 2023-11-15  发布在  Electron
关注(0)|答案(1)|浏览(263)

我正在开发一个电子应用程序,我使用外部.exe文件。在开发模式下应用程序工作正常。但当我打包应用程序时,它无法找到这些.exe文件。
如何在打包的应用程序中包含.exe文件。我使用电子构建器进行打包。
下面是我的配置,

"build": {
    "appId": "com.f.quickstart",
    "files": [
      "app/build/**/*",
      "app/build/**/*.exe",
      "main.js",
      "mainIPC.js",
      "src/**/*",
      "dist/**/*",
      "node_modules/**/*",
      "package.json"
    ],
    "win": {
      "target": "portable",
      "signAndEditExecutable": false
    },
    "linux": {
      "target": "AppImage"
    },
    "mac": {
      "target": "zip"
    }
  }

字符串

bfnvny8b

bfnvny8b1#

请注意,我使用的是:electron ^12.0.0electron-builder ^23.6.0Windows 11

安装过程中

如果您只需要安装程序中的exe,则可以使用resources目录。例如,当您想要在应用安装期间运行安装依赖项的exe时,这很有用。
下面是一个使用nsis安装程序的示例:
1.在根目录中创建一个resources目录。
1.在build规则中添加您需要的所有内容:

// package.json

{
...

  "build": {
    "appId": "mycompany.MyProductName",
    "productName": "MyProductName",
    "directories": {
      "buildResources": "resources"
    },
    "nsis": {
      "oneClick": false,
      "perMachine": true
    },
    "win": {
      "target": "nsis"
    },
    "extends": null
  }
}

字符串
1.在新的resources目录中创建vendor目录。
1.将你的exe文件拖到vendor目录中。
1.在resources目录中创建一个名为installer.nsh的文件,并编写如下内容:

!define vendordir "${BUILD_RESOURCES_DIR}\vendor"

!define myexe_64 "myexe.exe"
!define myexe "myexe_x86.exe"

!macro customInstall
  ${If} ${RunningX64}
    ExecWait '"${vendordir}\${myexe_64}"'
  ${Else}
    ExecWait '"${vendordir}\${myexe}"'
  ${EndIf}
!macroend


1.在Windows上运行electron builder dist命令。

安装过程中

在运行时使用exe是如此常见的用例,以至于我真的很惊讶我能找到这么少的文档。
下面是一个我如何做到这一点的例子:
1.在你的项目中创建一个名为extras的目录,我把我的放在src/main/extras
1.在build规则中添加extraFiles条目:

// package.json

{
...

  "build": {
    "extraFiles": [
      {
        "from": "src/main/extras",
        "to": "extras",
        "filter": [
          "**/*"
        ]
      }
    ],
  }
}


1.现在,您可以使用应用的路径来引用exe,但您需要根据开发和生产情况更改路径。为此,我们可以使用electron-is-dev

// preload.js

const { remote } = require('electron');
const path = require('path');
const isDev = require('electron-is-dev');

const appPath = remote.app.getAppPath();
const extrasPath = isDev ?
    path.join(appPath, 'src', 'main', 'extras') :
    path.join(appPath, '..', '..', 'extras');

// We finally have our exe!
const exePath = path.join(extrasPath, 'myexe.exe');


Electron Builder configuration docs仍然是一个很好的细节资源。
希望这对你有帮助!

相关问题