首页 新闻 会员 周边

请问,怎么样才能在网页中打开一个桌面应用程序,比如点击某一个按钮打开QQ或者某某游戏!

0
悬赏园豆:30 [待解决问题]

网页是在部署在服务器上的,有网就能访问的网页,点击按钮或者图片或者链接,直接打开客户端应用程序!IE没问题的电脑都可以用!应用程序的路径先不考虑,关键是怎么可以在服务器网页中访问桌面应用程序?  然后是找应用程序的路径,如果找不到就提示用户安装软件!

是.net做得网页!C#语言的!

问题补充:

可不可以具体详细点~!

晓明灬晓年的主页 晓明灬晓年 | 初学一级 | 园豆:170
提问于:2011-08-24 15:25

如何去掉打开时弹出“是否打开此协议的应用”的提示?

Linybo2008 4年前
< >
分享
所有回答(6)
0

做个ActiveX控件,嵌入网页,在ActiveX控件中使用ShellExecute API 启动桌面应用程序.

Launcher | 园豆:45045 (高人七级) | 2011-08-24 20:27
0

需要你自己定义协议,你看迅雷和QQ都有自己的协议,而且自己的协议还必须已经安装。

顾晓北 | 园豆:10844 (专家六级) | 2011-08-25 09:04
迅雷和QQ那种结构的都是CS项目去打开BS项目,这简单,BS项目去打开CS项目这有点挑战,而且楼主提的问题非常值得讨论,顶了
支持(0) 反对(0) 吴京西 | 园豆:261 (菜鸟二级) | 2011-08-25 17:46
一点都不值得讨论,迅雷是c/s打开b/s项目,你不看网站上有以tencent://开头的地址?就是那种点击就能打开QQ的,还有以thunder://开头的地址,就是打开迅雷。浏览器不是你的网站能控制的,所以怎么打开必须是浏览器支持的,但是浏览器不是你做的,怎么办?装东西,ie就是activex控件,其他像火狐,Chrome也都有插件机制,你每个浏览器都需要分别做。。。
支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2011-08-25 21:44
-1

可以利用线程去执行和调用这个CS结构的exe程序项目,不过CS结构中要指定启动项是那个cs画面,应该可以吧

吴京西 | 园豆:261 (菜鸟二级) | 2011-08-25 17:45
2

参照网上一段例子,本人已经试验通过,且用于正式项目。希望您也能成功

例子:

说到单点登录,往往是和Portal(门户)是离不开的。通常企业中会有许多应用,WEB的或CS的。而做Portal的时候往往是做成WEB的。这时候,用户登录Portal后,如何从Portal启动本地的CS程序,就成为需要解决的问题。
不知道大家是如何解决的,我的做法是,自己实现一个协议(就象迅雷/电驴/网络蚂蚁那样),在Portal上实现一个形如
协议名称://应用名称/作业?action=动作&param1=参数1&param2=参数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生成链接->浏览器发起请求->协议处理器分派-->各应用插件启动作业

星月 | 园豆:206 (菜鸟二级) | 2012-05-22 16:55

怎么在网页上调用exe呢?你那个链接不行啊!

支持(0) 反对(0) 灬棒棒糖灬LEE | 园豆:202 (菜鸟二级) | 2012-10-15 11:56
0

楼主,你是怎么解决这个问题的呢?我也遇到了相同的问题,跪求帮助!

我看了星月的回答,还是不太懂,在运行上测试可以了,但是网页上怎么去调用exe啊?

 

 

跪求帮助...                                                                                                

灬棒棒糖灬LEE | 园豆:202 (菜鸟二级) | 2012-10-15 11:55
0

从网页上启动exe我已经实现,但是如果用户未完装,怎么提示用户下载安装呢?

无招胜有招 | 园豆:204 (菜鸟二级) | 2016-05-19 15:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册