Protocol协议

最近项目上有个需求,需要我们的C/S系统支持网页启动用于集成。百度下做法,最简单的莫过于利用ActiveX来直接启动了

类似于如下代码:

Process.Start("程序路径");

但是貌似只有IE支持这样的做法,而本身ActiveX也存在不少被阻止的问题,Chrome等浏览器也不再支持(需要自己下插件),考虑到通用性,只有利用更加广泛的Protocol

怎么理解我们自己做的这个Protocol呢,相当于Http,FTP,Https等,只不过我们这个是私有的,不具有广义上的广泛性。其实我们自己定义的协议,和Thunder和Steam的协议差不多,我们也有很多具有借鉴的地方。

模仿其结构,在HKEY_CLASSES_ROOT下创建自己的Protocol

创建自己的节点并定义Protocol名称

然后定义DefaultIcon节点


创建shell和open节点,下面值均是空,创建command节点,值为 “路径” "%1"

然后简单的html代码

<html>
 <head>
 <meta />
 </head>
 <body>
 <div>
 <a href="3DIICP.YLR://admin">
 执行可执行文件
 </a>
 </div>
 </body>
</html>

3DIICP.YLR是在HKEY_CLASSES_ROOT下创建的文件名,admin是参数(程序中接受到的参数是完整的href中的值,所以要提前做好字符串的解析)
实现效果如下

不幸的是,测试到现在,只有IE和Edge浏览器通过了测试。。。

当然,也可以通过代码来控制注册表的书写,引用点击打开链接

string programFullPath = string.Format(@"{0}\{1}", filePath, "Globe.EntryPoint.exe");//绝对路径
                string nodeName = "3DIICP.YLR"; //节点名称 用于URL中调用 类似于http
                string protocolName = "3DIICP.YLR.Protocol"; //protocol名称 随意取

                RegistryKey key = Registry.ClassesRoot;
                RegistryKey software = key.CreateSubKey(nodeName);
                software.SetValue("URL Protocol", "");
                software.SetValue("", protocolName);

                RegistryKey softwareDefaultIcon = software.CreateSubKey("DefaultIcon");
                softwareDefaultIcon.SetValue("", string.Format("{0}", programFullPath));

                RegistryKey softwareShell = software.CreateSubKey("shell");
                softwareShell = softwareShell.CreateSubKey("open");
                softwareShell = softwareShell.CreateSubKey("command");
                softwareShell.SetValue("", string.Format("{0} %{1}", programFullPath, "%1"));
                Console.WriteLine("Protocol协议安装成功,按任意键继续...");

可以做一个控制台程序,权限问题很简单,引用文章中有描述,就不再赘述了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值