Как зарегистрировать пользовательский протокол в Windows, чтобы при нажатии ссылки в электронной почте или на веб-странице мое приложение было открыто и параметры из URL-адреса были переданы ему?
Как зарегистрировать собственный протокол URL в Windows?
Ответ 1
Я думаю, что это описано в MSDN, см. Регистрация приложения в протоколе 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
, затемNew
→Key
- В ключевом ключе укажите имя нижнего регистра, по которому вы хотите называть URL-адреса (в моем случае это будет
testus://sdfsdfsdf
), затем нажмите Right Mouse наtestus
→ , затемNew
→String Value
и добавьтеURL protocol
без значения.
- Затем добавьте другие записи, похожие на протокол (Right Mouse
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
(дайте несколько подсказок, которые вы хотите сделать), скажите "Да" ) и перейдите в argstestus://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();
}
}
}
Надеюсь, это сэкономит вам некоторое время.