Регистрация пользовательского протокола в процессе установки в электронном приложении
Привет, я новичок в электронике, и мне было интересно, как я могу зарегистрировать собственный протокол для приложения во время процесса установки приложения.
Я использую электронный строитель для создания приложения. Вот код сборки сборки
"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");
но это происходит, только если я запускаю приложение по крайней мере в первый раз.
Что я не хочу, нет никакой гарантии, что пользователь запустит приложение после установки.
Так есть ли способ, которым я могу зарегистрировать пользовательский протокол в процессе установки, используя электронный строитель
1 ответ
Я все еще новичок в области электронов и электроностроителей, но уже решил эту проблему для NSIS-цели. Прежде всего я должен отметить, что app.setAsDefaultProtocolClient
насколько я понимаю, используется для обработки пользовательских протоколов внутри приложения. Вам нужно зарегистрировать этот пользовательский протокол, используя сам электронный строитель.
Во-вторых, мне нужно выбрать между NSIS и squirrelWindows. NSIS предпочтительнее, насколько я понимаю, потому что Squirrel менее поддерживается и имеет некоторые проблемы. Опять же, я не эксперт, но я кое-что прочитал об этом. Так что секция squirrelWindows избыточна. Вы не указываете win.target
и это "nsis"
по умолчанию.
Существует проблема с регистрацией пользовательского протокола для цели NSIS. Вы можете прочитать больше здесь: Протокол (схема) для 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
к истине.
Я еще не решил эту проблему для Linux, но работаю в этом направлении. Вы можете увидеть мой код в моем проекте доказательства концепций здесь: EveHQ-NG применение концепции доказательств.
Если вы решите эту проблему для Linux и MacOS, напишите мне сообщение здесь или на GitHub.
Надеюсь, поможет.
Поскольку вы используете 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
ключ над ним.)
Пользовательский протокол все еще открывается только после открытия электронного приложения. И я также добавил 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()
}
})
Electron предоставляет очень простой способ регистрации URL настраиваемого протокола на клиентском компьютере (Windows, Mac)
таким образом, мы можем зарегистрировать и удалить наш собственный протокол в машине
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 для создания моего приложения
Для получения дополнительной информации пользовательский протокол электронного протокола