最近一个项目中要点击WEB页面上的链接启动自己编写的程序,而且还要接收参数,google了1.5小时,终于初步试验通过了。

尝试google了:web send message windows form, bs call cs program, custom protocol...多个关键字组合,发现这种技术叫

registered URL protocol,在这篇文章里介绍得比较详细:

http://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

1)首先写一个测试程序:

using System;
using System.Collections.Generic;
using System.Text; namespace Alert
{
class Program
{
static string ProcessInput(string s)
{
// TODO Verify and validate the input
// string as appropriate for your application.
return s;
} static void Main(string[] args)
{
Console.WriteLine("Alert.exe invoked with the following parameters.\r\n");
Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine); Console.WriteLine("\n\nArguments:\n");
foreach (string s in args)
{
Console.WriteLine("\t" + ProcessInput(s));
}
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
}
}
}

我把程序编译成edss.exe

2)用notepad编辑一个文件,改名为edss.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\EDSS]
@="URL:EDSS Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\EDSS\DefaultIcon]
@="\"D:\\alert\\edss.exe\""

[HKEY_CLASSES_ROOT\EDSS\shell]

[HKEY_CLASSES_ROOT\EDSS\shell\open]

[HKEY_CLASSES_ROOT\EDSS\shell\open\command]
@="\"d:\\alert\\edss.exe\" \"%1\""

运行edss.reg后,总是提示有些注册表项写入不成功,折腾了半天,看了http等协议的定义,最后终于发现是360在干扰。

关闭360安全卫士,注册表终于写入成功了!

原来是360安全卫士阻止最后一个注册表项的写入:

[HKEY_CLASSES_ROOT\EDSS\shell\open\command]
@="\"d:\\alert\\edss.exe\" \"%1\""

3)在IE中输入edss://hello,ie浏览器弹击一个安全警告窗口,确认后就正常启动了我的应用程序

4)在chrome中试了一下不成功,后来发现在chrome中不能直接输入edss://hello来启动,必须写一个html页面。

马上编写了一行html页面:<a href='edss://hello'> start my windows program </a>

chrome也可以启动我的windows程序了!

其它浏览器以后再试。

WEB程序调用客户端程序的更多相关文章

  1. web调用客户端程序

    背景 最近做一个集成需求,我们是B/S架构的,对方是C/S架构的,对方直接扔过来一个EXE连OCX都没有,让我们调用,也就是说,我们需要通过js程序去调用他们的客户端程序并传入多个参数,当时内心是崩溃 ...

  2. 【问题记录】— web页面调用本地程序

    起因: 最近由于项目需要在web页面中调用本地部署的exe程序:进而对该功能实现做了对应了解:以及存在的问题进行记录. 要实现该功能就不得不说浏览器自定义协议:解决办法:那么它是什么呢? 浏览器自定义 ...

  3. 自定义浏览器协议,实现web程序调用本地程序

    转自  http://blog.csdn.net/talking12391239/article/details/40712759 亲测可用 tencent://Message/?Uin=000000 ...

  4. Linux应用程序调用其他程序执行

    一.system 1.作用 在Linux应用程序中调用另一个程序: 2.用法 system("/sbin/ifconfig"): 二.popen 1.作用 调用另一个程序执行,同时 ...

  5. 1、简述在java网络编程中,服务端程序与客户端程序的具体开发步骤?

    网络编程分为UDP通信和TCP通信 UDP协议: 发送端:1.创建DatagramSocket对象.2.创建DatagramPacket对象,并封装数据.3.发送数据.4.释放 资源. 接收端:1.创 ...

  6. winform客户端程序第一次调用webservice方法很慢的解决方法

    .net2.0的winform客户端最常用的与服务端通信方式是通过webservice,最近在用dottrace对客户端做性能测试的时候发现,客户端程序启动以后,第一次调用某一个webservice的 ...

  7. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

    原文:[ASP.NET Web API教程]3.3 通过WPF应用程序调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  8. Linux下用gSOAP开发Web Service服务端和客户端程序

    网上本有一篇流传甚广的C版本的,我参考来实现,发现有不少问题,现在根据自己的开发经验将其修改,使用无误:另外,补充同样功能的C++版本,我想这个应该更有用,因为能用C++,当然好过受限于C. 1.gS ...

  9. Linux下用gSOAP开发Web Service服务端和客户端程序(一)

    1.功能说明: 要开发的Web Service功能非常简单,就是一个add函数,将两个参数相加,返回其和. 2.C版本的程序: (1)头文件:SmsWBS.h,注释部分不可少,url部分的IP必须填写 ...

随机推荐

  1. C#基础总结之七面向对象知识点总结1

    class Class //定义一个类 名字是Class { ; string NAME; string deptName; ; //如果是常量 只能获取,不能赋值 public string Nam ...

  2. 基于jQuery HTML5人物介绍卡片特效

    基于jQuery HTML5人物介绍卡片特效.这是一款基于jquery.material-cards插件实现的人物介绍卡片形式特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码 ...

  3. codeforces D. Design Tutorial: Inverse the Problem

    题意:给定一个矩阵,表示每两个节点之间的权值距离,问是否可以对应生成一棵树, 使得这棵树中的任意两点之间的距离和矩阵中的对应两点的距离相等! 思路:我们将给定的矩阵看成是一个图,a 到 b会有多条路径 ...

  4. libtool: link: `dftables.lo' is not a valid libtool object

    手误造成的错误: make & make install.&位操作符导致的错误!应该是make && make install.

  5. 你不一定知道的几个很有用的 Git 命令

    这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...

  6. Spring应用教程-1

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) Spring是Web框架,是容器框架,用于配置bean,并维护bean之间的关系的框架. 1. Spring在整 ...

  7. [软件] UnicornViewer

    可打开的文件格式有: *.pdg *.tif *.djvu *.djv *.uvz

  8. 邮箱mail 发送类 ASP.NET C#

    没有牛B的设计模式,代码精练精练实用,功能齐全,调用简单 ..全全完完为码农考虑 MailSmtp ms = new MailSmtp("smtp.qq.com","12 ...

  9. Django--models表操作

    需求 models对表的增删改查 知识点 1.基础操作 1.1  增 方法一 1 models.Tb1.objects.create(c1='xx', c2='oo')  #增加一条数据 1 2 di ...

  10. SQL实现分组查询取前几条记录

    我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...