网页端启动WinForm
网页端启动WinForm 程序
在逛淘宝或者使用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的更多相关文章
- 吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序
在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...
- 如何在网页端启动WinForm 程序
在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...
- 应用市场高速下载以及网页端调起APP页面研究与实现
Github博文地址,此处更新可能不是很及时. 好久没写博客了,好大一个坑.正好,最近刚做完应用市场的高速下载功能,便拿来填了这个坑. 话说产品为了增加用户量,提升用户活跃度以及配合推广,更坑爹的是看 ...
- 网页端HTML使用MQTTJs订阅RabbitMQ数据
最近在做一个公司的日志组件时有一个问题难住了我.今天问题终于解决了.由于在解决问题中,在网上也查了很多资料都没有一个完整的实例可以参考.所以本着无私分享的目的记录一下完整的解决过程和实例. 需求:做一 ...
- 解决Zabbix网页端Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No route to host问题
在安装配置完zabbix_agentd以后,网页端出现 Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No ...
- 应用市场快速下载以及网页端调起APP页面研究与实现
Github博文地址,此处更新可能不是非常及时. 好久没写博客了,好大一个坑. 正好,近期刚做完应用市场的快速下载功能,便拿来填了这个坑. 话说产品为了添加用户量,提升用户活跃度以及配合推广,更坑爹的 ...
- 【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0
目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v2.0 授权登录与权限检查 新功能的测试 兼容性测试 性能测试 前端测试-- ...
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- Netty源码分析之服务端启动过程
一.首先来看一段服务端的示例代码: public class NettyTestServer { public void bind(int port) throws Exception{ EventL ...
随机推荐
- 会话数据的保存——cookie
会话的理解 可以简单的理解为:用户打开浏览器,访问多个web资源,然后关闭浏览器,这个过程可以称为一次会话 有状态会话:可以简单理解为一个同学来了这个教室,下一次再来我们知道他来过这个教室,我们可以称 ...
- 半斤八两(创业兴家版 打工仔心声'98 Remix)
创业兴家打工仔 刻苦工作热诚日夜维系天天专心向上依足正轨 结力好比兄弟努力一生打工仔 相亲相爱朋情日夜传递彼此一家那用分高与低 要互相多鼓励 半斤八两 莫记往昔的创伤半斤八两 面对春光应插秧半斤八两 ...
- C#使用Sockets操作FTP【转载】
using System; using System.Collections; using System.IO; using System.Net; using System.Net.Sockets; ...
- VWMare CentOS 6.5 静态IP设置
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVmYXVsdDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- Linux下搭建Oracle11g RAC(4)----配置oracle,grid用户SSH对等性
虽然在安装软件的过程中,oracle会自动配置SSH对等性,建议在安装软件之前手工配置. 配置oracle用户对等性: node1: [root@node1 ~]# su - oracle node1 ...
- 使用CSS的类名交集复合选择器
首先先看一下基本定义: 复合选择器就是两个或多个基本选择器,通过不同方式连接而成的选择器,主要包括“交集”选择器.“并集”选择器.“后代”选择器. 交集选择器 “交集”复合选择器是由两个选择器直接连接 ...
- burp
http://www.2cto.com/Article/201406/310929.html
- 移动web前端小结(一)
这段时间做了几个移动项目的前端页面,姑且称之webapp.做这几个项目之前根本没接触过移动端的相关知识,以为和PC端页面没啥区别无非就是尺寸小一点罢了.上手以后发现问题颇多.下面从框架.相关知识点.遇 ...
- 一封给“X教授”的回信(讨论Socket通信)
转载:http://www.cnblogs.com/tianzhiliang/archive/2011/03/02/1969187.html 前几天"X教授"发Email与我讨论S ...
- python中文件类的应用
python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件: 1) os.mknod("test.txt") 创建空文件 2) open("tes ...