当前位置 : 主页 > 大数据 > 区块链 >

启动应用程序 – 协议处理程序

来源:互联网 收集:自由互联 发布时间:2021-06-22
要求:我们希望通过按钮或链接从网页启动外部比较工具(如BeyondCompare或WinMerge).文本文件路径应在其启动时传递给工具,因此它可以理解它们并在左侧和右侧比较面板中打开它们. 尝试的
要求:我们希望通过按钮或链接从网页启动外部比较工具(如BeyondCompare或WinMerge).文本文件路径应在其启动时传递给工具,因此它可以理解它们并在左侧和右侧比较面板中打开它们.

尝试的解决方案:

1)使用JavaScript的ActiveXObject:用户只需单击按钮/链接并启动其计算机上安装的比较工具即可.但它只适用于Internet Explorer,所以我们不能这样做.

参考:How to run an external program, e.g. notepad, using hyperlink?

2)使用Java Applet:由于安全原因,浏览器中嵌入的applet不允许访问本地文件系统,它将引发“访问控制异常”.因此,我们也不能同意这一点.

参考:Why is my applet throwing an AccessControlException?

3)使用协议处理程序:我们可以设置自定义URL协议来触发程序.就像我们使用mailto:user@email.com语法创建电子邮件链接一样,这将自动在Windows上启动Outlook. “mailto”是Windows注册表中的预定义协议.

类似地,我们创建了自己的协议,在注册表中说“launchCompareTool”,并且能够启动任何应用程序,如WinMerge或BeyondCompare.但是,我们无法将左侧和右侧文件路径作为参数传递给应用程序.可能是启动的应用程序需要期望这些参数.

参考:http://www.dreamincode.net/forums/topic/220444-run-program-from-server-on-client-computer/
http://msdn.microsoft.com/en-us/library/aa767914%28v=vs.85%29.aspx#app_reg

与“mailto”协议不同,后者将“正文”和“主题”参数传递给了解它们的邮件客户端(如Outlook).这些比较工具没有可以从协议传递的参数.

还有另一种方法可以满足这一要求吗?

谢谢,
阿卜杜勒

最近又创造了另一种方法来执行相同的操作.基本上这种新方法继续创建一个Handler应用程序,它只是一个基于Windows控制台的ClickOnce应用程序. ClickOnce处理程序将充当主机(网页或Outlook或任何可嵌入链接的东西)和目标应用程序(如WinMerge或Beyond Compare)之间的拦截器.单击主机应用程序中的嵌入式链接将调用Handler应用程序.链接只是一个http url,它将保存querystring参数中的信息.由于处理程序应用程序是ClickOnce部署的,因此它允许自己发布到Web服务器.嵌入式链接(HTTP URL)将调用处理程序应用程序,然后处理程序应用程序将解析收到的查询字符串参数,最后调用相关的目标应用程序. Handler应用程序可以被视为Click Once Deployed解析器应用程序.以下是代码示例在 Custom-HyperLinks-Using-a-Generic-Protocol-Handler的详细文章.

安舒尔梅拉

网友评论