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

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

Ответ 2

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

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

Ответ 3

  • Перейдите к Start, затем в Find введите regedit → , чтобы открыть Registry editor

  • Нажмите Right Mouse на HKEY_CLASSES_ROOT, затем NewKey

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

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

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

  1. Затем добавьте другие записи, похожие на протокол (Right Mouse NewKey) и создайте иерархию типа testusshellopencommand и внутри 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();
        }
    }
}

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