在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天。之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的问题,因为使用网页端的打印效果并不是太好,之前也写过关于打印相关的文章可以查阅,我需要使用WinForm客户端来驱动打印,但是我又不想重新开发Winform客户端的所有功能,只要能够使用winform驱动打印即可。我就需要一个类似阿里旺旺一样的功能,点击网页上的按钮启动WinForm程序,并且传递一定的参数。

  一. 注册协议

    在网上查阅相关资料,要在网页中启动相关的Winform程序,可以使用注册表自定义协议来完成,一下是完成的步骤:

    (1) 在命令行(cmd)输入regedit 可以打开注册表的预览窗体

    (2) 自定义协议的名称为gitwms,名字可以随意,尽量取的有意义

    (3) 在注册表 HKEY_CLASSES_ROOT 下添加项项: 右键选择该节点,新建-项-在树节点中输入协议名称 gitwms

    (4) 选中gitwms节点,在右侧列表框中双击默认项,在数值数据输入框中输入 “URL:自定义协议” , 网上说可以随意些,没有测试,输入此值测试成功

    (4) 然后在列表中右键 新建 字符串值, 在名称栏输入 "URL Protocol", 然后双击该项在数据这一栏输入 "URL Protocol"  , 数据栏数据随意

    (5) 在gitwms 节点下新建项: "shell"

    (6) 在"shell" 项下新建项:"open"

    (7) 在"open"项下新建项:"command"

    (8) 选中command项,右侧列表中双击默认这一行,在数据数值这一项中输入 "D:\Print.exe" "%1"  , 注意这里的 引号是要的,前面是程序的绝对路径,后面暂且固定吧【还未完全弄懂】

  二. 网页测试

    在记事本中编辑 <a href="gitwms:441">点击这里启动程序</a>  内容, 然后另存为网页格式,使用浏览器打开。

    

    点击网页上的连接,会出现如上对话框。和启动阿里旺旺的比较类似了,应该说离成功不远了。点击按钮启动应用 就可以启动客户端程序了

    

    注册表添加之后的结构如上图

  三. 难道每次都手工添加注册表

    上面注册表的操作都是使用手工处理的,这样在安装程序的时候多麻烦, 要是能够实现使用程序注册注册表,那就省事多了。 这个在很多程序中都有这样的功能,使用.NET也可以很方便的操作注册表。 注册表分为几个节点,注册表开头分支,也叫根分支,分别是:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG。

    (1)使用RegistryKey的OpenSubKey()方法打开注册表

    (2)使用RegistryKey的CreateSubKey()方法新建注册表

    (3)使用RegistryKey的DeleteSubKey()方法删除注册表

    (4)使用SetValue()方法设置/创建注册表键值

    在使用的时候需要先检查注册表是否存在,如果存在删除原有的注册情况,然后新增注册信息。

            try
{
Console.WriteLine("正在查找已经注册的程序.....");
RegistryKey key = Registry.ClassesRoot;
key.DeleteSubKeyTree(@"gitwms");
Console.WriteLine("已经清除注册程序.....");
}
catch (Exception e)
{
Console.WriteLine("未找到注册的程序...");
} /*===============================================*/
Console.WriteLine("开始注册程序....");
RegistryKey regWrite = Registry.ClassesRoot.CreateSubKey("gitwms");
regWrite.SetValue("", "URL:自定义协议");
regWrite.SetValue("URL Protocol", "URL Protocol");
regWrite.Close(); regWrite = Registry.ClassesRoot.CreateSubKey(@"gitwms\shell");
regWrite.Close(); regWrite = Registry.ClassesRoot.CreateSubKey(@"gitwms\shell\open");
regWrite.Close(); regWrite = Registry.ClassesRoot.OpenSubKey(@"gitwms\shell\open", true);
RegistryKey aimdir = regWrite.CreateSubKey("command"); string BaseDirectory=AppDomain.CurrentDomain.BaseDirectory;
string AppPath = Path.Combine(BaseDirectory, "OWorld.Cloud.Resource.Download.exe"); aimdir.SetValue(@"", "\""+AppPath+"\" \" %1\""); regWrite.Close();
aimdir.Close();

    使用以上代码可以轻松的实现注册的写入, 并且完全满足刚才自定义协议的规则。 这里我们将注册的程序做成一个register.exe 程序, 放到要启动的客户端程序根目录下, 在使用前使用管理员身份运行注册程序,便于获取启动程序的根路径写入到注册表。

这里有一个地方是值得注意的,新建注册表之后就会出现一项 (默认) 的键值数据, 刚开始无论怎样都不能往这个项中写入数据, 是自己没有弄明白的,这里是一个坑。  在使用SetValue() 赋值的时候,需要将Key 设置为 "", 不然不能往(默认)这一项中写入值。

  四. 如何传递参数

    启动了客户端程序这远远还不够,如何能够将网页上的参数传递到客户端程序中。

static void Main(string[] args)

    关键点就在这里, 主程序进入之后,使用参数数组 args 接收外来参数。

<a href="gitwms:441">点击这里启动程序</a>

    点击这个连接会将参数 gitwms:441 全部传入到args中,  gitwms:****  后可以跟任意的参数, 包括JSON字符串。 这样就方便多了,获取参数之后就可以做相应的操作

  以上程序操作是为了启动客户端的打印而做的,这里不一定做的很好,但是也不失为一种办法。

如何在网页端启动WinForm 程序的更多相关文章

  1. 吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

    在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...

  2. 网页端启动WinForm

    网页端启动WinForm 程序 在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓 ...

  3. 从web页面启动winform程序的实现方法

    本文实现的需求是: A.通过web页面启动winform程序: B.将页面的参数传递给winform程序: C.winform程序已经启动并正在运行时,从web页面不能重新启动winform程序,只是 ...

  4. 从web启动winform程序

    最近有个客户提出想从网站上启动一个客户端的程序,研究了下,实现方法如下: 1. 注入注册表 try                {                    string appPath ...

  5. 【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0

    目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v2.0 授权登录与权限检查 新功能的测试 兼容性测试 性能测试 前端测试-- ...

  6. C# winForm程序开机启动和托盘显示 (转http://blog.csdn.net/xinyue3054/article/details/6599508)

    这段时间一直进行cs项目,故整理下开机自动运行.托盘.显示.隐藏. (1).在窗口上点击关闭按钮或者最小化时将托盘显示: (2).双击托盘图标显示窗口: (3).右键点击托盘图标提供三个菜单选项,“退 ...

  7. WinForm程序启动控制台窗口Console

    本文转载:http://blog.csdn.net/oyi319/article/details/5753311 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop ...

  8. C# WinForm程序添加启动画面

    如果程序在装载时需要进行较长时间的处理,最好使用启动画面,一方面美化程序,一方面可以不使用户面对着一片空白的程序界面. 我手头上一个小项目主界面启动时需要检查用户文件及运行环境是否有效,需要一段时间处 ...

  9. MySQL程序端启动密码错误解决方法

    MySQL程序端启动密码错误解决方法 一般启动MySQL程序端,都是用mysql -uroot -p命令,当然前提是你的环境变量已经配好了. 为了连接服务器,当调用mysql时,通常需要提供一个MyS ...

随机推荐

  1. django 模板中url的处理

    在模板中直接添加‘/home’这样的链接是十分不推荐的,因为这是一个相对的链接,在不同网页中打开可能会返回不一样的结果. 所以推荐的是 <a href="{{ object.get_a ...

  2. 解决冲突-git入门教程

    人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 Switched to a new ...

  3. 系统安装之:虚拟机VMware V12.0.1 专业版 + 永久密钥

    撰写日期:2016-6-30 10:30:26 转自:http://blog.sina.com.cn/s/blog_4549d6770102vxue.html    VMware V12.0.1 专业 ...

  4. python数据类型和字符串(三)

    一.变量 变量声明变量 #!/usr/bin/env python age= gender1='male' gender2='female' 变量作用:保存状态(程序的运行本质是一系列状态的变化,变量 ...

  5. Docker探索系列2之镜像打包与DockerFile

    preface docker基本入门以后,可以试试打包docker镜像与dockerfile了 docker镜像 docker hub仓库有2类仓库,用户仓库和顶层仓库,用户仓库由docker用户创建 ...

  6. Saltstack 介绍、安装、配置(一)

    Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/  (介绍各操作系统安装方法) http://repo.sal ...

  7. 什么是xmlschema

    XML Schema定义(XML Schema Definition,XSD)是一套W3C标准,用于基于XML的称为XML Schema的类型系统.用于定义的语言是一种称为XML模式定义语言(XML ...

  8. uC/OS-II互斥信号(OS_mutex)块

    /*************************************************************************************************** ...

  9. WinForm------TreeList修改节点图标和按钮样式

    转载: https://documentation.devexpress.com/#WindowsForms/DevExpressXtraTreeListTreeList_CustomDrawNode ...

  10. 查看linux机器是32位还是64位的方法

    file /sbin/init 或者 file /bin/ls/sbin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dyna ...