从浏览器启动客户端程序 综述 现在有很多B/S 与C/S 相结合的产品,会出现一种需求:从浏览器启动客户端的程序,并且如果客户端未安装相应程序,先提示安装。 主流的几款产品:腾讯QQ、阿里旺旺、迅雷、PPLiv e 等,都有实现了类似的功能。 浏览器启动客户端程序可以通过注册自定义的Url 协议来实现,而检测客户端是否安装程序需要利用 Activ eX 控件。 要额外注意的是,现在只有IE 浏览器才支持。 客户端程序 先准备一个简单的客户端程序,只用来显示传入的命令行参数。 Client 1 namespace wuhong.Client 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 if (args != null && args.Length > 0) 8 { 9 Array.ForEach(args, arg => Console.WriteLine(arg)); 10 } 11 12 Console.ReadLine(); 13 } 14 } 15 } 从浏览器启动 注册自定义的Url 协议,这样当用户点击这个URL 协议的链接后,IE 就会启动相关URL 协议的处理器,使用注册的程序来处理这个协议。 具体来说,比如现在需要注册“wuhong.client”的Ur l 协议,使得形如“wuhong.client:XXXXYYYY”的链接都由上节的控制台程序来处理。 这一切只需要在客户端安装控制台程序的同时向注册表添加下面的项就可以实现: 注册表 1 [HKEY_CLASSES_ROOT\wuhong.client] 2 3 @="wuhong.Client" 4 5 "URL Protocol"="" 6 7 [HKEY_CLASSES_ROOT\wuhong.client\DefaultIcon] 8 9 @=" wuhong.Client.exe " 10 11 [HKEY_CLASSES_ROOT\wuhong.client\Shell] 12 13 [HKEY_CLASSES_ROOT\wuhong.client\Shell\open] 14 15 [HKEY_CLASSES_ROOT\wuhong.client\Shell\open\command] 16 17 @="\"[TARGETDIR]wuhong.Client.exe\" \"%1\"" 解释一下其中几项: [HKEY_CLASSES_ROOT\wuhong.client] 默认项和URL Protocol 项的值都是设置一个名称。 [HKEY_CLASSES_ROOT\wuhong.client\DefaultIcon] 默认项的值是Url 协议的图标文件名的路径。简单处理可以省略这一项。 [HKEY_CLASSES_ROOT\wuhong.client\Shell\open\command] 默认项的值是用来调用(或者启动)处理这个Url 协议的程序。整个Url 会作为一个参数传递给处理程序。 检测客户端程序安装 检测客户端是否安装了上节的控制台程序,需要另外实现一个ActiveX 控件,在客户端安装程序的同时一并安装。这样可以...