使用 SWF 的 Electron 在测试时有效,但在构建后无效

Electron using SWF works when testing but not after build

我有一个简单的 Electron 应用程序,我正在合并一个具有 SWF 对象的 HTML 页面。我包含了 Pepper Flash Player 并从 tutorial 复制了 main.js 代码。当我从命令提示符 运行 应用程序 / git bash 进行测试时,SWF 工作正常。但是,一旦我构建了应用程序并 运行 它,SWF 内容将不会加载。内容区只显示"Couldn't load plugin.".

我已经包含了 Flash 播放器插件的 32 位和 64 位版本。

let pluginName;
switch (process.platform) {
  case 'win32':
    if (process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) {
      console.log("64bit");
      pluginName = "PEP/pepflashplayer64_29_0_0_171.dll";
    }
    else{
      console.log("32bit");
      pluginName = "PEP/pepflashplayer32_29_0_0_171.dll";
    }
    break
  case 'darwin':
    pluginName = 'PEP/PepperFlashPlayer.plugin'
    break
}

 app.commandLine.appendSwitch('ppapi-flash-path', path.join(__dirname, pluginName))

我通过反复试验找出了我的问题(有几个)。

  1. 主要问题是,在构建时,我有 --asar=true,因此该应用程序试图从 asar 存档中提取插件,但它做不到。为了解决这个问题,我只是在构建时将插件添加到 --extraResource 标志中。
  2. 除此之外,我在应用程序中更新了 switch 语句以确定它是构建还是测试(从 cmd 行),如下所示:

      switch (process.platform) {
        case 'win32':
          if (basename === "resources") {
            pluginName = "../../pepflashplayer32_29_0_0_171.dll";
          }
          else {
            pluginName = "./plugins/pepflashplayer32_29_0_0_171.dll";
          }
          break
        case 'darwin':
          if (basename === "resources") {
            pluginName = '../../PepperFlashPlayer.plugin'
          }
          else {
            pluginName = './plugins/PepperFlashPlayer.plugin'
          }
          break
      }
    
  3. 最后,正如我在搜索的各个地方指出的那样,使用的是 64 位插件而不是 32 位插件。

我希望这可以为其他人节省一些时间。