从浏览器(Windows)启动exe

本文关键字:启动 exe Windows 浏览器 | 更新日期: 2023-09-27 17:59:14

我需要从浏览器(而不仅仅是IE)启动已安装的应用程序。

从这个线程中,我了解到我需要实现异步可插拔协议,并将应用程序注册到uri方案。

我想看看是否有其他方法可以实现它?

在我的场景中,我将从客户端机器启动一个现有的应用程序。因此,我可以将此应用程序注册到uri方案并使用它吗?

我唯一担心的是,在这两种情况下(或者至少在第二种情况下),我们都必须更改注册表。如果注册表设置不存在,这将不起作用。

是否有其他不依赖于注册表设置或任何先决条件的方式。

谢谢。

从浏览器(Windows)启动exe

如果没有您描述的类型,就无法在浏览器外调用可执行文件(我可能会在您的位置使用应用程序URI方案,因为这是您最不需要自定义插件的工作)。这是因为,如果您可以调用任何应用程序而不需要用户进行注册表编辑或一些相关更改,那么您就可以对用户机器上的任何应用程序执行任何您想要的操作。它被称为沙箱,HOWTO GEEK有一篇不错的文章

沙箱是一个严格控制的环境,程序可以跑沙盒限制了一段代码的功能无需添加额外权限即可获得所需的多个权限这可能会被滥用。

例如,您的web浏览器基本上运行您访问的网页沙箱。它们仅限于在您的浏览器中运行和访问有限的资源集--没有它们就无法查看您的网络摄像头权限或读取计算机的本地文件。如果您访问的网站没有被沙盒化,与系统的其他部分隔离,访问恶意网站就像安装病毒一样糟糕。

正如他们所指出的,当你在浏览器中时,你已经处于沙盒中了。如果你想编写一个可以从里面访问的应用程序,你需要在HTML、JavaScript等的功能和限制范围内工作。

从你自己的MSDN链接,你可以在Windows上看到,

如果没有此密钥,处理程序应用程序将不会启动。

你的帖子似乎表明Windows确实是你的相关目标操作系统。如果你想在另一个操作系统上这样做(或者如果其他人读到这个问题),方法会与你已经找到的不同(这些已经是堆栈溢出问题):

  • OSX和iOS
  • Android
  • Linux

理论上,可以创建特定于每个可能的浏览器的插件或配置应用程序,以进行完全自定义的操作。然而,你会重新发明轮子,因为你需要同样的权限提升来安装你的应用程序/插件。此外,您还需要重新设计上面提到的协议,并以某种方式提前分发应用程序进行安装。

此外,当使用网络摄像头访问和地理定位等新的网络功能时,有时看起来应用程序正在顺利地访问用户的浏览器体验。我们在这里实际看到的是一些新的JavaScript API,取代了Flash小程序和其他我们过去需要通过第三方软件利用的东西。

  • getUserMedia(或者可能是webkitGetUserMediamozGetUserMedia,具体取决于浏览器)允许使用网络摄像头和麦克风的媒体。浏览器在允许之前已经实现了权限提示,但该应用程序仍然是一个JavaScript应用程序
  • Geolocation API在这里被写入HTML5标准,最简单的实现(JavaScript)看起来是这样的:navigator.geolocation.getCurrentPosition(show_map);它仍然只是一个JavaScript库。如果你使用它,这个网站会提到添加一些错误处理/回退等等。它可以从IE 9开始使用。请参阅其他浏览器的链接
  • 您可以使用navigator.registerProtocolHandler(从Mozilla文档中了解更多信息)。但是,除了内置协议(例如mailto)之外,您还将考虑使用与调用此函数所在域相同的域上的web应用程序来处理URI。要设置一个处理链接<a href="burger:cheeseburger">this</a>中的协议汉堡的处理程序,您可以写道:navigator.registerProtocolHandler("burger", "http://www.google.co.uk/?uri=%s", "Burger handler");您可以在W3C规范中找到更多信息,包括其他白名单方案,但您需要仔细选择浏览器来支持并确保您的目标受众能够使用它。每当我想确定浏览器支持时,我都喜欢引用CanIUse。看起来Chrome和Firefox都加入了,IE却退出了
  • 我确实找到了一种方法,通过添加一个协议处理程序,在Ubuntu中添加一些类似的功能,IF您假设能够在使用链接之前让所有客户端机器运行一些脚本(具有SUDO权限)。这是多么恰当:Ubuntu中的链接调用包管理器。由于这又回到了Windows解决方案的"创建一个可以编辑注册表中MIME类型的安装脚本"的领域,我想我可以到此为止