电子协议处理程序不在Windows上工作

时间:2017-08-08 14:07:25

标签: javascript node.js electron

我正在尝试使用app.setAsDefaultProtocolClient注册一个协议处理程序,我在macOS上运行正常但在Windows 10上我得到一个对话框

Error launching app  
Unable to find Electron app at 'C:\Program Files(x86)\Google\Chrome\Application\60.0.3….. Ect
Cannot find module 'C:\Program Files(x86)\Google\Chrome\Application\60.0.3….. Ect

它在Chrome \ Application文件夹中查找是否正确?如果我使用npm start或使用electronic-packager从打包的应用程序运行,我会收到同样的错误。

我是否需要为Windows配置?就像mac上的plist一样?我一直在寻找,但似乎找不到任何东西。让我知道我可以添加的任何信息以帮助。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题:协议处理程序在Windows的开发环境中找不到应用程序的位置。一切都可以在OSX和Windows上打包时使用。解决方法是在注册协议时手动提供应用程序的路径。

最初,我有类似的东西,它可以在OSX和Windows上的packaged.exe上运行:

if(!app.isDefaultProtocolClient('app')) {
  app.setAsDefaultProtocolClient('app');
}

以下是修正了Windows上开发路径问题的修复程序:

// remove so we can register each time as we run the app. 
app.removeAsDefaultProtocolClient('app');

// If we are running a non-packaged version of the app && on windows
if(process.env.NODE_ENV === 'development' && process.platform === 'win32') {
  // Set the path of electron.exe and your app.
  // These two additional parameters are only available on windows.
  app.setAsDefaultProtocolClient('app', process.execPath, [path.resolve(process.argv[1])]);        
} else {
  app.setAsDefaultProtocolClient('app');
}

我设置了项目,以便process.env.NODE_ENV告诉我是否在开发环境中。如果您在开发环境中,则希望将两个附加参数传递给app.setAsDefaultProtocolClient。当然,第一个参数是要注册的协议,第二个参数应该是电子可执行文件的路径。 process.execPath是默认值,其计算结果应为/path/to/your/project/node_modules/electron/dist/electron.exe或类似值。

第三个参数是您要与electron.exe一起运行的参数数组。就我而言,我想运行我的应用程序,所以我传入包裹在数组[]中的路径。 process.argv[1]只是获取开发应用程序路径的一种方法,该路径应评估为/path/to/your/project/dist/electron/main.js或类似的版本。

有关更多信息:https://electronjs.org/docs/api/app#appsetasdefaultprotocolclientprotocol-path-args