从浏览器启动一个exe(Windows)

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

从这个线程我明白,我需要实现asynchronous可插拔协议和注册应用程序到urischeme 。

我想检查是否有其他的方法来实现它?

在我的scheme中,我期望从客户机启动一个现有的应用程序。 那么我可以注册这个应用程序到urischeme并使用它。

我唯一担心的是在两种情况下(或者至less在第二种情况下),我们必须对registry进行更改。 如果registry设置不存在,这将无法正常工作。

有没有其他方式不依赖于registry设置或任何先决条件。

谢谢。

Solutions Collecting From Web of "从浏览器启动一个exe(Windows)"

没有一种方法可以在浏览器之外调用一个可执行文件,而不需要你描述的东西(我可能会在你的地方使用应用程序URI方案,因为这是你自己定制的最小的插件)。 这是因为如果你可以调用任何应用程序而不需要用户需要注册表编辑或者一些相关的改变,你可以用任何你知道在用户机器上的应用程序来做任何你想要的。 这就是所谓的沙盒, HOWTO GEEK上有一个体面的文章。

沙箱是一个可以运行程序的严格控制的环境。 沙箱限制了一段代码可以做的事情,只需要尽可能多的权限,而不需要添加可能被滥用的额外权限。

例如,您的Web浏览器基本上运行您在沙箱中访问的网页。 他们被限制在您的浏览器中运行并访问一组有限的资源 – 他们无法查看您的摄像头未经许可或读取您的计算机的本地文件。 如果您访问的网站不是沙盒的,并且与系统的其他部分隔离,访问恶意网站将与安装病毒一样糟糕。

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

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

没有这个键,处理程序应用程序将不会启动。

您的文章似乎表明,Windows确实是您的相关目标操作系统。 如果你想在另一个操作系统上做这件事(或者如果有人读这个问题),这些方法将会与你已经发现的不同(这些已经是堆栈溢出问题):

  • OSX和iOS
  • Android的
  • Linux的

理论上,您可以创建特定于每个可能的浏览器的插件或配置应用程序来完成一些完全自定义的操作。 但是,你会重新发明轮子,因为你需要相同的权限提升来安装你的app / plugin。 此外,你会重塑上述协议,并以某种方式提前分发安装应用程序。

另外,有时候,当新的网络功能(如摄像头访问和地理位置)正在被使用时,应用程序似乎可以顺利地获得用户的浏览体验。 我们实际上在这里看到的是一些新的JavaScript API来取代Flash applet和我们以前需要通过第三方软件进行处理的其他事情。

  • 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浏览器不在。
  • 如果您在使用链接之前,假设您能够让所有客户端计算机运行某些脚本(具有SUDO权限),我只是想方设法在Ubuntu中添加一些类似于此功能的方法。 这是如何apt:Ubuntu中的链接调用包管理器。 由于这回到了Windows解决方案的“创建安装脚本,可以在注册表中编辑MIME类型”的领域,我想我可以在这里停下来。

在Windows中,应用程序的指定协议可以在注册表中注册。 在这个msdn文档显示注册一个应用程序到一个URI方案。

例如,将启动一个可执行文件'alert.exe'。 以下项目可以注册。

 HKEY_CLASSES_ROOT alert (Default) = "URL:Alert Protocol" URL Protocol = "" DefaultIcon (Default) = "alert.exe,1" shell open command (Default) = "C:\Program Files\Alert\alert.exe" 

然后你可以写一个html来测试

 <head> <title>alter</title> </head> <body> <a href="alert:" >alert</a> <body>