Abd*_*han 6 launching-application protocol-handler
要求:我们希望通过按钮或链接从网页启动外部比较工具(如 BeyondCompare 或 WinMerge)。文本文件路径应在启动时传递给该工具,以便它理解它们并在左侧和右侧比较面板中打开它们。
尝试过的解决方案:
1) 使用JavaScript 的 ActiveXObject:用户可以简单地单击按钮/链接并启动安装在其机器上的比较工具。但它只适用于 Internet Explorer,所以我们不能这样做。
2) 使用Java Applet:出于安全原因,嵌入在浏览器中的Applet 不允许访问本地文件系统,并且会抛出“访问控制异常”。因此,我们也不能这样做。
Ref:为什么我的小程序会抛出 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”协议不同,“mailto”协议将“body”和“subject”参数传递给理解它们的邮件客户端(如 Outlook)。这些比较工具没有可以从协议传递的参数。
还有其他方法可以满足这个要求吗?
谢谢,阿卜杜勒
最近创造的另一种方法也具有相同的效果。基本上,这种新方法依赖于创建处理程序应用程序,该应用程序只不过是基于 Windows 控制台的 ClickOnce 应用程序。ClickOnce 处理程序应用程序将充当主机(网页或 Outlook 或任何可以嵌入链接的任何内容)和目标应用程序(如 WinMerge 或 Beyond Compare)之间的拦截器。单击主机应用程序中的嵌入链接将调用处理程序应用程序。该链接只不过是一个 http url,它将在查询字符串参数中保存信息。由于处理程序应用程序是 ClickOnce 部署的,因此它允许将自身发布到 Web 服务器。嵌入的链接(HTTP URL)将调用处理程序应用程序,然后处理程序应用程序将解析接收到的查询字符串参数,最后调用相关的目标应用程序。处理程序应用程序可以被视为单击一次部署的解析器应用程序。以下是Custom-HyperLinks-Using-a-Generic-Protocol-Handler中包含代码示例的详细文章。
安舒尔·梅赫拉