Protocol协议

xiaoxiao2021-02-28  87

最近项目上有个需求,需要我们的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协议安装成功,按任意键继续..."); 可以做一个控制台程序,权限问题很简单,引用文章中有描述,就不再赘述了

转载请注明原文地址: https://www.6miu.com/read-96657.html

最新回复(0)