javascript - Electron 协议(protocol)处理程序不适用于 Windows

标签 javascript node.js electron protocol-handler

我正在尝试使用 app.setAsDefaultProtocolClient 注册一个协议(protocol)处理程序,我在 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 或从使用 electron-packager 的打包应用程序运行,我会得到同样的错误。

我是否缺少需要为 Windows 配置的东西?喜欢 mac 上的 plist 吗?我一直在四处寻找,但似乎找不到任何东西。让我知道我可以添加的任何信息以提供帮助。

最佳答案

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

最初,我有这样的东西,它在 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。当然,第一个参数是您要注册的协议(protocol),第二个参数应该是 Electron 可执行文件的路径。 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

关于javascript - Electron 协议(protocol)处理程序不适用于 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45570589/

相关文章:

javascript - 已将 div 文本插入输入字段并需要知道 div 是否为空?

javascript - 链接 javascript promises 时如何处理 then() 函数中的条件?

angularjs - 在 Electron 应用程序中单击菜单更改 AngularJS 状态

angular - Angular 8负载外部npm封装

javascript - 如何使用 Node.js 和 Express 在 JavaScript 中通过 GET 请求更改页面?

angular - Electron and Angular : fs. existsSync 不是函数

javascript - 找不到 npm 模块流

Django 模板中动态生成表单的 Javascript 验证

javascript - 如何我的切换按钮更改颜色只有我的折叠在我的 bootstrap 3 导航栏中打开

node.js - 使用 Webpack 4 和 Babel 7 的 React-Loadable SSR