Как мне зарегистрировать собственный протокол URL в Windows?

Как мне зарегистрировать пользовательский протокол в Windows, чтобы при нажатии на ссылку в электронном письме или на веб-странице открывалось мое приложение и ему передавались параметры из URL?

7 ответов

  1. Идти к Start затем в Find тип regedit -> должно открыться Registry editor

  2. Щелкните правой кнопкой мыши на HKEY_CLASSES_ROOT затем New -> Key

  1. В Ключе укажите имя в нижнем регистре, по которому вы хотите, чтобы URL вызывался (в моем случае это будет testus://sdfsdfsdf) затем щелкните правой кнопкой мыши на testus -> тогда New -> String Value и добавить URL protocol без значения.

  1. Затем добавьте больше записей, как вы сделали с протоколом (правая мышь New -> Key) и создать иерархию как testus -> shell -> open -> command и внутри command менять (Default) к пути, где .exe вы хотите запустить это, если вы хотите передать параметры в ваш exe, то оберните путь к exe в "" и добавить "%1" выглядеть как: "c:\testing\test.exe" "%1"

  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
  1. Чтобы создать файл .bat, откройте текстовый редактор, скопируйте приведенный выше код и сохраните файл с расширением .bat (например, Register_protocol.bat). Обязательно настройте переменные имя_протокола и путь_приложения в соответствии с вашими требованиями.

    Когда вы запускаете файл .bat, он регистрирует собственный обработчик протокола, изменяя реестр Windows. Вы должны увидеть сообщение «Пользовательский обработчик протокола успешно зарегистрирован!» сообщение, если регистрация прошла успешно.

    Обратите внимание, что для изменения реестра Windows требуются права администратора. Обязательно запустите файл .bat от имени администратора.

Другие вопросы по тегам