WEB程序调用客户端程序

最近一个项目中要点击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程序调用客户端程序,布布扣,bubuko.com

时间: 2024-10-13 23:31:54

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

asp.net网页调用客户端程序

================================第一步:网注册表中(HKEY_CLASSES_ROOT)添加项 ================================第二步:在网页上写上标签调用 <a href="xishui://hello">zhangdi://hello</a> ================================显示效果:会弹出hello asp.net网页调用客户端程序,布布扣,bubuko.com

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

转自  http://blog.csdn.net/talking12391239/article/details/40712759 亲测可用 tencent://Message/?Uin=000000&websiteName=qzone.qq.com&Menu=yes Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Tencent\DefaultIcon] @="C:\\Program Files\\Tencent\

IE调用客户端程序

原文地址 https://msdn.microsoft.com/en-us/library/aa767914.aspx#app_reg Registering an Application to a URI Scheme The About Asynchronous Pluggable Protocols article describes how to develop handlers for Uniform Resource Identifier (URI) schemes. In some

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

一.system 1.作用 在Linux应用程序中调用另一个程序: 2.用法 system("/sbin/ifconfig"): 二.popen 1.作用 调用另一个程序执行,同时保存执行的结果: 2.使用示例 #include <stdio.h> int main() { FILE *pf; char buffer[4096]; pf = popen("/sbin/ifconfig", "r"); fread(buffer, siz

Day22 【小程序】Credit Card(ATM),购物程序调用信用卡程序接口支付

程序介绍:  实现信用卡(ATM)常用功能:(支持多账户登陆)1.取款:2.还款:3.转账:4.查询余额:5.查询账单(流水,支持按年月日时分秒记录): 程序结构:ATM/├── README├── atm #ATM主程目录│   ├── __init__.py│   ├── bin #ATM 执行文件 目录│   │   ├── __init__.py│   │   ├── atm.py  #ATM 执行程序│   │   └── manage.py #ATM 管理端,未实现│   ├── c

浅析Java web程序之客户端和应用服务器端交互原理

最近一直在思考一个问题,为什么在用struts框架开发的时候FormBean都需要序列化,即实现java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体了解了怎么做,但是还是没有搞清楚为什么要这样做:最后我想解决一个问题要找问题的根源和本质,于是从web程序客户端和服务器端交互的原理入手,终于找到了我要的答案. 1. 对象序列化是什么东东? 简单地说,Java对象列化就是要把内存中的Java对象保存下来(持久化),以便可以在网络上传输或今后

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

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-static-files.html http://www.yuanjiaocheng.net/ASPNET-CORE/setup-mvc.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html h

浅析Java web程序之客户端和服务器端交互原理(转)

转载自http://www.cnblogs.com/lys_013/archive/2012/05/05/2484561.html 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务. 该模型的目的是使各种硬件在相同的层次上相互通信.这7层是:物理层.数据链路层.网路层.传输层.话路层.表示层和应用层.而TCP/IP通讯协议采用 了4层的层级结构,每一层都呼叫它

Windows、Linux、Web安装及调用Matlab程序完整说明(大章)

本文档详细说明了Linux下Web项目调用Matlab函数的完整操作,文章适合对Java.Linux有一定基础了解的人群(不了解也没什么,无非是多试几次).因Linux作为服务器,所以未在其上安装Matlab主程序,只安装了运行环境MCR. 本文档内所述的所有版本软件均以32位为准,JDK与MCR也使用32位.若你的系统为64位,Linux系统同样为64位,则请尽量选择使用64位版本的JDK与MCR. 由于Matlab的版本限制问题,请保证Matlab主程序和MATLABCompiler Run