Как зарегистрировать пользовательский протокол в 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();
}
}
}
Надеюсь, это сэкономит вам некоторое время.


