如何通过网页打开exe?Register Protocol注册协议 实现迅雷浏览器唤起。
实际应用中使用到用网页打开本地软件的功能,开始用Activex控件操作,
奈何权限管控太严格。
找到了新的方法Register Protocol注册协议
。
新建一个 .reg文件
拷贝下面内容:
REGEDIT4
[HKEY_CLASSES_ROOT\foo]
@="URL:foo Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\foo\shell]
[HKEY_CLASSES_ROOT\foo\shell\open]
[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"C:\\Program Files\\Application\\program.exe\" \"%1\""
修改 foo
和 C:\\Program Files\\Application\\program.exe
为自己要打开的软件的协议名称和地址。
然后再浏览器输入 foo://test
就可以打开本地软件了,和迅雷的链接一样 thunder://xxx
。
在程序被唤起打开后 将收到一个参数 foo://test 可自由分割获取真实使用参数。
C#代码 写注册表
//设置启动协议名称
string ProgramName = "foo";
//拿到自身运行的路径
string ProgramPath = Application.ExecutablePath;
//写注册表
RegistryKey key = Registry.ClassesRoot;
RegistryKey software = key.CreateSubKey(ProgramName);
software.SetValue("URL Protocol", "");
software.SetValue("", "URL:" + ProgramName + " Protocol");
RegistryKey softwareShell = software.CreateSubKey("shell");
softwareShell = softwareShell.CreateSubKey("open");
softwareShell = softwareShell.CreateSubKey("command");
softwareShell.SetValue("", string.Format("\"{0}\" \"%{1}\"", ProgramPath, 1));
key.Close();
下面是官方的译文:
Register Protocol注册协议是一个用来通过连接来发送、接收和处理信息的方法。普通常见的浏览器协议包括http、https、ftp和mailto。为了你能够发送一个指定的协议来查看信息,你必须注册它们。如果你输入一个未知协议(如foo)的URL在你的定位符工具栏中,你将接收到一个这样的消息:“FireFox不知道如何打开这个地址,因为协议(foo)并不关联于任何程序或者在Mozilla Suite/SeaMonkey中,foo不是一个已经注册的协议”。
一旦注册,协议就可以用你指定的程序进行处理,就像你的浏览器或者第三方的阅读器。这意味着一个超级链接(例如:foo://fred)可以使用协议foo来打开文件fred。
在Windows中,协议注册时写入操作系统的。例如,当你设置一个网页浏览器为默认浏览器,操作系统将注册http、https和ftp协议并且将它们关联到这个网页浏览器;当你在邮件消息或者一个互联网快捷方式中打开http、https和ftp链接的时候,这个URL将通过这个网页浏览器来打开。相似的,当你设置默认的邮件客户端,操作系统将注册mailto协议,以至于在浏览器中打开mailto链接的时候会打开这个关联的邮件应用程序。
注意: Mozilla Suite/SeaMonkey integrates mail and browser functions 以至于一个邮件消息的网页链接(例如:http://链接)将在SeaMonkey浏览器窗体中打开,“mailto:”链接将在SeaMonkey Mail中打开,而不管操作系统中协议处理器的相关设置。
其他协议可以通过配置一个安装的程序被注册为关联到一个外部应用程序来处理相关内容。例如:你可以通过RealPlayer的“偏好”->“内容”->“媒体类型”设置为RTSP URLs注册相关的处理器为RealPlayer(Real-Time Streaming Protocol)。接下来当你再次打开rtsp://链接的时候,Firefox或者Mozilla Suite/SeaMonkey将在应用程序启动前询问你是否确定这个外部的协议请求。
同样也可以通过创建一个像下面这样的.reg文件来注册协议,将它们改成文件:
REGEDIT4
[HKEY_CLASSES_ROOT\foo]
@="URL:foo Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\foo\shell]
[HKEY_CLASSES_ROOT\foo\shell\open]
[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="C:\\web.exe %1"
将foo替换为你指定的希望运行的程序C:\\Program Files\\Application\\program.exe。
注意:两个反斜干(\\)以及转义的引号(\")不应该被替换(必须的)。保存文件,然后双击它们以让他们插入Windows注册表。看看附加信息《Registering an Application to a URL Protocol》
参考:https://blog.csdn.net/weixin_33691817/article/details/86270408