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

86

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

Люкек
источник

Ответы:

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

  2. Нажмите Right Mouseна HKEY_CLASSES_ROOTпотом New->Key

введите описание изображения здесь

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

введите описание изображения здесь

  1. Затем добавьте больше записей, как вы сделали с протоколом ( Right Mouse 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(дать вам несколько подсказок, которые вы хотите сделать это - скажите Да) и передать в args 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();
        }
    }
}

Надеюсь, это сэкономит вам время.

Матас Вайткявичюс
источник
3
Вау, эта штука работает. И не только в IE, но и в Chrome!
user1974566
36

Я думаю, что это описано в MSDN, см. Регистрация приложения в протоколе URL .

Йонас Энгстрём
источник
5
Я писал приложение на основе oauth, и процедура, описанная в MSDN, отлично работает с Mozilla Firefox и Opera (11.6)
Виктор Латыпов
11
Это работает во всех браузерах под Windows. Это вещь на уровне операционной системы, а не на уровне браузера.
Эндрю Дункман
7
Я поддержал, но, пожалуйста, отредактируйте ответ, чтобы включить соответствующую информацию из ссылки в соответствии с политикой SO. Благодарность!
dotancohen
Какие версии Windows поддерживают это?
ᆼ ᆺ ᆼ
21

Ссылка MSDN хороша, но информация о безопасности там не полная. Регистрация обработчика должна содержать «% 1», а не% 1. Это мера безопасности, потому что некоторые источники URL-адресов неправильно декодируют% 20 перед вызовом обработчика пользовательского протокола.

PS. Вы получите весь URL-адрес, а не только его параметры. Но URL-адрес может подвергнуться некоторому неправильному обращению, помимо уже упомянутого преобразования% 20-> space. Это помогает быть консервативным при разработке синтаксиса URL. Не добавляйте случайное // // или вы попадете в беспорядок, который есть у file: //.

MSalters
источник
Что именно вы подразумеваете под "беспорядком, который представляет собой файл: //"?
Малеев
6
Не существует формального сопоставления URL-адресов file: с локальными путями. Нет даже единого мнения об использовании двух или трех ведущих косых черт или об использовании прямых и обратных косых черт, когда путь ссылается на каталог Windows.
MSalters,
Поздний комментарий, я знаю. Но это также можно каким - то образом получить доступ к параметрам URL только без обработчика протокола?
Данило Барген
2
Звучит как отдельный вопрос. Пожалуйста, сформулируйте ваши условия прямо. Обработчик протокола - это программа, которая получает URL. «Без обработчика протокола» некому проанализировать URL и получить доступ к параметрам URL.
MSalters