如何在Windows中注册自定义URL协议?

luk*_*eck 54 windows url protocols custom-url-protocol

如何在Windows中注册自定义协议,以便在单击电子邮件或网页中的链接时打开我的应用程序并将URL中的参数传递给它?

Mat*_*ius 31

  1. Start然后转到Find类型regedit- >它应该打开Registry editor

  2. 点击Right MouseHKEY_CLASSES_ROOT然后New- >Key

在此输入图像描述

  1. 在主要由给您想要的网址被称为(对我来说这将是小写的名称testus://sdfsdfsdf),然后点击Right Mousetestus- >然后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(不是ChromeFirefox)并输入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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这能为您节省一些时间.

  • 哇,这东西有效。不仅在 IE 上,还在 Chrome 上! (3认同)
  • @MatasVaitkevicius 谢谢。是的,找到了答案。在这里发帖-可能对其他人有用。/sf/ask/4800444981/?noredirect=1#comment121226027_68577785 (2认同)

Jon*_*lle 29

我认为这在MSDN中有所涉及,请参阅将应用程序注册到URL协议.

  • 这适用于Windows上的所有浏览器.这是一个os级别的东西,而不是浏览器级别的东西. (10认同)
  • 我赞成,但请编辑答案,根据SO政策包含链接中的相关信息.谢谢! (6认同)
  • 我正在编写基于oauth的应用程序,MSDN中描述的过程与Mozilla Firefox和Opera完美配合(11.6) (5认同)

MSa*_*ers 19

MSDN链接很好,但那里的安全信息不完整.处理程序注册应包含"%1",而不是%1.这是一种安全措施,因为在调用自定义协议处理程序之前,某些URL源会错误地解码%20.

PS.您将获得整个URL,而不仅仅是URL参数.但除了已经提到的%20->空间转换之外,URL可能会受到一些虐待.在URL语法设计中保守一点很有帮助.不要乱扔//或者你会陷入文件://的混乱.

  • 文件没有正式映射:URL到本地路径.当路径引用Windows目录时,对使用两个或三个主斜杠或使用正斜杠和反斜杠都没有达成共识. (5认同)
  • 这听起来像是一个单独的问题。不过,请务必弄清楚您的条款。协议处理程序是接收 URL 的程序。“没有协议处理程序”就没有人解析 URL 和访问 URL 参数。 (2认同)

duc*_*zle 18

如果有人想要用于创建关联的 .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\""
Run Code Online (Sandbox Code Playgroud)

将其粘贴到记事本中,然后文件 -> 另存为 -> duck.reg,然后运行它。运行后,当您duck://arg-here在 chrome 中输入内容时,ConsoleApp1.exe 将以“arg-here”作为参数运行。exe 的路径需要使用双斜杠,并且必须对双引号进行转义。

在带有 Edge(chrome 版本)和 Chrome 的 Windows 11 上进行了测试和运行


Shu*_*mar 8

有一个 npm 模块用于此目的。

链接: https: //www.npmjs.com/package/protocol-registry

因此,要在 Nodejs 中执行此操作,您只需运行以下代码:

首先安装它

npm i protocol-registry
Run Code Online (Sandbox Code Playgroud)

然后使用下面的代码注册您的条目文件。

npm i protocol-registry
Run Code Online (Sandbox Code Playgroud)

然后假设有人打开 testproto://test 然后将启动一个新终端执行:

node yourapp/index.js testproto://test
Run Code Online (Sandbox Code Playgroud)

它还支持所有其他操作系统。