Как мне зарегистрировать собственный протокол URL в Windows?
Как мне зарегистрировать пользовательский протокол в Windows, чтобы при нажатии на ссылку в электронном письме или на веб-странице открывалось мое приложение и ему передавались параметры из URL?
7 ответов
Идти к
Start
затем вFind
типregedit
-> должно открытьсяRegistry editor
Щелкните правой кнопкой мыши на
HKEY_CLASSES_ROOT
затемNew
->Key
- В Ключе укажите имя в нижнем регистре, по которому вы хотите, чтобы URL вызывался (в моем случае это будет
testus://sdfsdfsdf
) затем щелкните правой кнопкой мыши наtestus
-> тогдаNew
->String Value
и добавитьURL protocol
без значения.
- Затем добавьте больше записей, как вы сделали с протоколом (правая мышь
New
->Key
) и создать иерархию какtestus
->shell
->open
->command
и внутриcommand
менять(Default)
к пути, где.exe
вы хотите запустить это, если вы хотите передать параметры в ваш exe, то оберните путь к exe в""
и добавить"%1"
выглядеть как:"c:\testing\test.exe" "%1"
- Чтобы проверить, работает ли он, перейдите к
Internet Explorer
(неChrome
или жеFirefox
) и введитеtestus:have_you_seen_this_man
это должно уволить.exe
(дать вам несколько подсказок, что вы хотите это сделать - скажите "Да") и передать в аргументыtestus://have_you_seen_this_man
,
Вот пример консольного приложения для тестирования:
using System;
namespace Testing
{
class Program
{
static void Main(string[] args)
{
if (args!= null && args.Length > 0)
Console.WriteLine(args[0]);
Console.ReadKey();
}
}
}
Надеюсь, это сэкономит вам время.
Я думаю, что это покрыто MSDN, пожалуйста, смотрите Регистрация приложения по протоколу URL.
Ссылка MSDN хороша, но информация о безопасности там не полная. Регистрация обработчика должна содержать "%1", а не%1. Это мера безопасности, поскольку некоторые источники URL-адресов некорректно декодируют%20 перед вызовом обработчика пользовательского протокола.
PS. Вы получите весь URL, а не только параметры URL. Но URL может подвергаться некоторому плохому обращению, кроме уже упомянутого преобразования%20->space. Это помогает быть консервативным в вашем дизайне синтаксиса URL. Не добавляйте случайно //, или вы попадете в беспорядок, что file:// is.
Если кому-то нужен файл .reg для создания ассоциации, смотрите ниже:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\duck]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\duck\shell]
[HKEY_CLASSES_ROOT\duck\shell\open]
[HKEY_CLASSES_ROOT\duck\shell\open\command]
@="\"C:\\Users\\duck\\source\\repos\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\net6.0\\ConsoleApp1.exe\" \"%1\""
Вставил это в блокнот, файл -> сохранить как -> duck.reg, а потом запустил. После запуска, когда вы набираетеduck://arg-here
в chrome ConsoleApp1.exe будет работать с аргументом "arg-here". Для пути к exe требуется двойная косая черта, а двойные кавычки должны быть экранированы.
Протестировано и работает в Windows 11 с Edge (версия для Chrome) и Chrome
Для этого есть модуль npm.
ссылка:https://www.npmjs.com/package/protocol-registry
Итак, чтобы сделать это в nodejs, вам просто нужно запустить код ниже:
Сначала установите это
npm i protocol-registry
Затем используйте приведенный ниже код, чтобы зарегистрировать входной файл.
const path = require('path');
const ProtocolRegistry = require('protocol-registry');
console.log('Registering...');
// Registers the Protocol
ProtocolRegistry.register({
protocol: 'testproto', // sets protocol for your command , testproto://**
command: `node ${path.join(__dirname, './index.js')} $_URL_`, // $_URL_ will the replaces by the url used to initiate it
override: true, // Use this with caution as it will destroy all previous Registrations on this protocol
terminal: true, // Use this to run your command inside a terminal
script: false
}).then(async () => {
console.log('Successfully registered');
});
Затем предположим, что кто-то открывает testproto: // test, тогда будет запущен новый терминал, выполняющий:
node yourapp/index.js testproto://test
Он также поддерживает все остальные операционные системы.
Чтобы еще больше расширить существующие ответы, приложение, вызываемое для обработки протокола, не обязательно должно быть скомпилированным приложением. Это также может быть файл сценария.
Например, вы можете создать пакетный файл Windows, например, как показано ниже, для обработки вызова. Предположим, вы сохранили этот скрипт вc:\temp\testprotocol-handler.bat
.
REM just echo the passed argument
echo off
echo Hello from the custom protocol handling script.
echo script name: %0
echo script arg : %1
pause
Используйте следующую конфигурацию реестра, чтобы сопоставить сценарий с протоколом.testprotocol
.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\testprotocol]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\testprotocol\shell]
[HKEY_CLASSES_ROOT\testprotocol\shell\open]
[HKEY_CLASSES_ROOT\testprotocol\shell\open\command]
@="\"C:\\temp\\testprotocol-handler.bat\" \"%1\""
Когда ОС встретит протокол, она выполнит сценарий — откроет командное окно и отобразит содержимоеecho
высказывания в сценарии.
@echo off
setlocal
set "protocol_name=sugamprotocol"
set "application_path=C:\Users\%USERNAME%\Downloads\ping_execute.exe"
set "key_path=HKCU\SOFTWARE\Classes\%protocol_name%"
set "command_path=%key_path%\shell\open\command"
REM Create the registry key for the custom protocol handler
reg add "%key_path%" /ve /d "URL:Custom Protocol" /f > nul
reg add "%key_path%" /v "URL Protocol" /d "" /f > nul
REM Create the command key to specify the application to run
reg add "%command_path%" /ve /d "\"%application_path%\" \"%%1\"" /f > nul
echo Custom protocol handler registered successfully!
endlocal
Чтобы создать файл .bat, откройте текстовый редактор, скопируйте приведенный выше код и сохраните файл с расширением .bat (например, Register_protocol.bat). Обязательно настройте переменные имя_протокола и путь_приложения в соответствии с вашими требованиями.
Когда вы запускаете файл .bat, он регистрирует собственный обработчик протокола, изменяя реестр Windows. Вы должны увидеть сообщение «Пользовательский обработчик протокола успешно зарегистрирован!» сообщение, если регистрация прошла успешно.
Обратите внимание, что для изменения реестра Windows требуются права администратора. Обязательно запустите файл .bat от имени администратора.