从网页上打开本地应用程序——Windows下 URI Scheme的使用

来源:互联网 发布:淘宝店铺级别提升 编辑:程序博客网 时间:2024/05/22 14:27

一、问题描述:

最近做的项目要求从网页端启动本地的应用程序(windows系统下),同时会给应用程序传递某些参数,所以接触到了URL Protocol这个东西。

二、所处条件:

1、本地的应用程序是unity3D开发的软件。

2、目标平台是windows PC端。

3、使用AdvancedInstaller制作软件安装包。

二、主要问题的解决过程:

1、编写注册表处理文件,即*.reg文件,所有代码如下:

Windows Registry Editor Version 5.00    [HKEY_CLASSES_ROOT\Simu]  "URL Protocol"="X:\\xx.exe"  @="SimuProtocol"    [HKEY_CLASSES_ROOT\Simu\DefaultIcon]  @="X:\\xx.exe,1"    [HKEY_CLASSES_ROOT\Simu\shell]    [HKEY_CLASSES_ROOT\Simu\shell\open]    [HKEY_CLASSES_ROOT\Simu\shell\open\command]  @="\"x:\\xx.exe\" \"%1\""  

注意上面每一行原则上缺一不可,但实际上有些是可以省略的。不过最好都写上,否则有可能会出问题。

2、在AdvancedInstaller中导入此reg文件,并将上面的路径有关的字符串改成advancedInstaller中的“变量”

3、build安装包进行安装。

4、在目标机器上安装该软件。

5、测试URL Protocol是否成功写入注册表:在txt中写入"<a href="Simu://canshu">点击打开目标程序</a>"并保存成html文件,用浏览器打开此网页,点击链接,若出现提示请求打开本地程序,则代表成功。

6、写接受参数的代码。C#中从System.Environment.commandLine这个字符串中来获取传过来的参数。这个字符串的格式是"X:\...\XX.exe Simu://canshu",用正则表达式截取即可。如果使用控制台程序接受参数,可以从main函数的参数argus[0]里获取上面的字符串。


三、遇到的其他问题及处理办法:

1、参考资料1中也有提及,参数如果是中文,某些浏览器会对其进行URL编码,而某些则不会,所以最好统一先将参数进行一些编码,且最好不是URL编码,因为在获取参数的时候可能又会把URL编码出来的字符串再次转换成其他编码,会乱码。

2、主要是AdvancedInstaller的使用问题,比如把程序安装进入C盘时会出现权限问题等,有时间再总结一下。

四、主要参考资料:

1、微软官方文档

2、fkepgydhbyuan的专栏

五、其他说明

1、iPhone SDK中似乎也有对这种URI Scheme的支持,详见通过自定义的URL Scheme启动你的App

2、在Chrome、edge、360浏览器上测试有效

1 0
原创粉丝点击