例子:
说到单点登录,往往是和Portal(门户)是离不开的。通常企业中会有许多应用,WEB的或CS的。而做Portal的时候往往是做成WEB的。这时候,用户登录Portal后,如何从Portal启动本地的CS程序,就成为需要解决的问题。
不知道大家是如何解决的,我的做法是,自己实现一个协议(就象迅雷/电驴/网络蚂蚁那样),在Portal上实现一个形如
协议名称://应用名称/作业?action=动作¶m1=参数1¶m2=参数2…
这样的例子可能是(我们协议名是用公司简称,这里我就用foo):
<a href=”foo://erp/order?action=query&owner=hydonlee”>我的订单</a>
通过这样的设计,让浏览器象处理http协议的链接一样,把请示发送给我们的应用。
那如何让浏览器将这个链接发送给我们的协议处理器呢?这就需要向系统中注册一下(Windows下),注册表如下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\foo]
@="URL: foo Application 协议"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\foo\DefaultIcon]
@="d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe,1"
[HKEY_CLASSES_ROOT\foo\shell]
[HKEY_CLASSES_ROOT\foo\shell\open]
[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe\" \"%1\""
怎么样?是不是很简单?其实将这个加入注册表之后,你可以开始->运行,输入:foo://test/ 回车,来测试你的协议处理器了!windows系统会把网址作为参数提供给命令行。
注册协议处理器的C#代码如下,我是写在协议处理器的类中的:
private void FooProtocolRegister() {
// copyright(c) hydonlee, 转载请注明原址
RegistryKey cr = Registry.ClassesRoot;
RegistryKey Fookey = cr.CreateSubKey("Foo");
//添加Foo键
Fookey.SetValue("", "URL: Foo Application 协议");
Fookey.SetValue("URL Protocol", "");
//添加DefaultIcon
RegistryKey iconKey = Fookey.CreateSubKey("DefaultIcon");
iconKey.SetValue("", string.Format("{0},1", Application.ExecutablePath.ToLowerInvariant()));
//添加Shell Key
RegistryKey shellKey = Fookey.CreateSubKey("shell");
RegistryKey openKey = shellKey.CreateSubKey("open");
RegistryKey commandKey = openKey.CreateSubKey("command");
commandKey.SetValue("", string.Format("\"{0}\" \"%1\"", Application.ExecutablePath.ToLowerInvariant()));
Fookey.Close();
}
这样,由浏览器的链接,已经传递到我们本地的应用中了,剩下的事情就比较简单了。协议处理器分析这个地址,呼叫相应的作业插件,并将参数传入。
简单来说就是:通过协议地址模型,Portal生成链接->浏览器发起请求->协议处理器分派-->各应用插件启动作业
Activity X插件调用
<script type="text/javascript"> <!-- function runExecutable() { var executableFullPath = 'F:\\ZK\\DownLoadFile\\YodaoDict.exe'; try { var shellActiveXObject = new ActiveXObject("WScript.Shell"); if ( !shellActiveXObject ) { alert('Could not get reference to WScript.Shell'); return; } shellActiveXObject.Run(executableFullPath, 1, false); shellActiveXObject = null; } catch (errorObject) { alert('Error:\n' + errorObject.message); } } // --> </script> <input type="button" onclick="runExecutable()" value="打开客户端程序">
相关推荐
html页面打开QQ.exe等本地应用程序
绝对的好用,值得收藏,可以实现拍照,和打开本地的照片。
Process 应用 c#打开QQ编程 Process 应用 so easy
制作网页超链接,点击后打开QQ聊天框
一个关于如何打开和关闭本地应用程序的C#实现
打开QQ并且让它自己输入用户名和密码的vbs脚本.pdf
迅雷QQ综合信息查询助手迅雷QQ综合信息查询助手迅雷QQ综合信息查询助手
可以在页面中引导,打开与指定QQ的聊天界面。用户没有启动QQ的,QQ会提示用户没有打开,是否打开,然后打开聊天界面
# QQ打开聊天窗口.jsQQ打开聊天窗口。
将里面的LinkSimulate.dll和注册组件.bat这2个文件全部剪切到你电脑安装迅雷的所在目录的ComDlls文件夹内。 然后双击打开注册组件.bat提示组件注册成功后即可。 组件注册成功后。你就可以用你的迅雷下载所有的快车...
使用方法: 1、上传fanghong目录至网站根目录。 2、将本目录"代码,记得修改!...手机QQ内打开会自动跳转浏览器; 手机微信内打开需用用户手动跳转; 用户可选择对应浏览器; 用户可手动复制网站地址;
【网页防封】微信qq打开网页时提示浏览器打开,防止微信qq封杀网页 操作简单,上传源码上去 首页加载代码即可 文件有详细的操作教程
在VB6.0中让窗体像QQ一样自动隐藏,纯代码,有详细使用说明,文件用记事打开即可
QQ微信域名防封处理技术源码 微信网址域名强制跳转至浏览器打开 红域名打开访问 1已被拦截的红域名,通过此源码可以实现不提示拦截,直接在微信内打开。 2无需跳转到浏览器,也能打开 3修复打开失败,跳转卡顿的问题...
解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁解决QQ空间打开慢的补丁
双击文件夹中的exe文件,注册自定义协议,可以通过prefix.ini配置文件变更相关注册数据,然后用用浏览器打开test.html测试运行,附c++源码。
Web页面打开外部EXE程序,类似于网页上的QQ客服功能的实现 Web页面打开外部EXE程序 Web页面打开外部EXE程序
大家好 今天教大家“如何用QQ影音老版本在电脑上直接打开ISO文件模仿DVD播放” 首先我们要下载个旧版本的QQ影音 新版本的可能没有这个功能 如果找不到程序可以联系我 安装QQ影音的过程我就不演示了 很简单 我已经...
组件注册成功后,你就可以用你的迅雷下载所有的快车专用链接和旋风专用链接的文件下载地址了,包括快车官方和旋风官方的文件下载。 注:组件注册成功后,打开IE浏览器,看到快车或旋风下载链接,直接按鼠标左键即可...
本次项目主要包含了QQ消息、联系人和动态三个选项卡界面的切换,其中消息界面设计的很详细,有消息列表和消息内容,在点击消息对话框后,会跳转到聊天界面,还会把联系人姓名传值过来。联系人和动态的界面就是很简单...