您好我是电子新手,想知道如何在应用安装过程中为应用注册自定义协议。
我正在使用电子构建器来构建应用程序。这是构建构建代码
"build": {
"appId": "com.test.testapp",
"productName": "testapp",
"asar": true,
"protocols": [{
"name": "testapp",
"schemes": [ "testapp" ]
}],
"nsis": {
"oneClick": false,
"perMachine": true,
"allowToChangeInstallationDirectory": true,
"runAfterFinish": false,
"createDesktopShortcut": true
},
"squirrelWindows": {
"msi": true
},
"directories": {
"output": "distribution"
}
我知道通过添加以下行注册自定义协议
app.setAsDefaultProtocolClient("testapp");
但只有在我第一次运行应用程序时才会这样做。
我不希望用户无法保证用户在安装后启动应用程序。
有没有办法可以使用电子修建器
在安装过程中注册自定义协议答案 0 :(得分:2)
我还是电子和电子制造商的新手,但已经为NSIS-target解决了这个问题。首先,我应该注意app.setAsDefaultProtocolClient
用于处理应用程序内部的自定义协议,据我所知。您需要使用电子构建器本身注册此自定义协议。
其次我需要在NSIS和squirrelWindows之间做出选择。我理解NSIS是最好的,因为Squirrel支持较少并且有一些问题。我再也不是专家,但我读了一些关于它的东西。所以squirrelWindows部分是多余的。您没有指定win.target
,默认情况下为"nsis"
。
NSIS目标的自定义协议注册存在问题。您可以在此处阅读更多内容:Protocol (scheme) for windows但有一种解决方法。您需要在installer.nsh
文件夹中创建一个名为build
的文件,其中包含以下内容:
!macro customInstall
DetailPrint "Register evehq-ng URI Handler"
DeleteRegKey HKCR "evehq-ng"
WriteRegStr HKCR "evehq-ng" "" "URL:evehq-ng"
WriteRegStr HKCR "evehq-ng" "EveHQ NG SSO authentication Protocol" ""
WriteRegStr HKCR "evehq-ng\DefaultIcon" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME}"
WriteRegStr HKCR "evehq-ng\shell" "" ""
WriteRegStr HKCR "evehq-ng\shell\Open" "" ""
WriteRegStr HKCR "evehq-ng\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend
将evehq-ng
替换为您的协议字符串,将EveHQ NG SSO authentication Protocol
替换为您的协议说明。
之后,您必须将nsis.perMachine
设置为true。
我还没有为Linux解决这个问题但是朝着这个方向努力。您可以在我的概念证明项目中查看我的代码:EveHQ-NG proof of concepts application。
如果您将为Linux和MacOS解决此问题,请在此处或GitHub上以某种方式向我发送消息。
希望它有所帮助。
答案 1 :(得分:1)
由于您使用的是electron-builder
,因此可以执行以下操作:
"build": {
... other top level electron-builder keys ...
"protocols": [
{
"name": "Custom Protocol Name",
"schemes": [
"customProtocol"
]
}
]
}
如果您想使用自己的应用程序处理customProtocol://some-link
。
更多详细信息: https://www.electron.build/configuration/configuration
(搜索protocols
;到目前为止,该文档格式有点不正确。它应该是与上方的fileAssociations
键相同的顶级键。)
答案 2 :(得分:1)
自定义协议仅在打开电子应用程序后仍然打开。而且我还在构建文件夹中添加了 installer.nsh 。我不知道怎么了。
package.json
{
"name": "electron-project",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "electron .",
"pack": "build --dir",
"dist": "build"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "^3.0.8",
"electron-builder": "^20.38.5"
},
"dependencies": {
"axios": "^0.18.0"
},
"build": {
"win": {
"target": "nsis"
},
"nsis": {
"oneClick" : false ,
"allowToChangeInstallationDirectory": true,
"include" : "dist/installer.nsh" ,
"perMachine" : true
},
"protocols": [{
"name": "electron-deep-linking",
"schemes": [
"test"
]
}],
"mac": {
"category": "public.app-category.Reference"
}
}
}
main.js
const { app, BrowserWindow } = require('electron')
const path = require('path')
const url = require('url')
let mainWindow
function createWindow() {
mainWindow = new BrowserWindow({ width: 800, height: 600 })
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
mainWindow.on('closed', function () {
mainWindow = null
})
}
app.setAsDefaultProtocolClient('test')
app.on('ready', createWindow)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', function () {
if (mainWindow === null) {
createWindow()
}
})
答案 3 :(得分:0)
电子提供了一种非常简单的方法来在客户端计算机(Windows,Mac)中注册自定义协议URL
这样,我们可以在计算机中注册和删除自己的自定义协议
const {app} = require('electron')
app.on('ready', onReady)
function onReady() {
.... // write other code
if(!app.isDefaultProtocolClient('quickstart')) {
app.setAsDefaultProtocolClient("quickstart", 'C:\\Users\\karthi\\electron-quick-start\\electron-quick-start-win32-x64\\electron-quick-start.exe');
}
}
此代码将在计算机中注册自定义协议,然后您可以使用quickstart://params
之类的浏览器打开应用程序
用于删除计算机中的自定义协议
app.removeAsDefaultProtocolClient("quickstart", 'C:\\Users\\karthi\\electron-quick-start\\electron-quick-start-win32-x64\\electron-quick-start.exe');
在这里,我使用了电子快速入门应用,并使用electron-packager
npm构建了我的应用
有关更多信息,自定义协议electron-protocol