从浏览器中启动exe文件(Windows)

3

我需要从浏览器(不仅限于IE)启动一个已安装应用程序。

这个线程中了解到,我需要实现异步插件协议注册应用程序到URI方案

我想确认是否有其他实现方式?

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

我的唯一担忧是在两种情况(或至少第二种情况)下,我们都必须进行注册表更改。如果注册表设置不存在,这将无法工作。

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

谢谢。

1个回答

8

如果没有你所描述的那些方法,就没有办法在浏览器外调用可执行文件(我可能会使用应用程序 URI 方案,因为这是你最少需要自定义插件的方式)。这是因为如果你可以调用任何应用程序,而不需要用户进行注册表编辑或其他相关更改,那么你可以��用户机器上的任何应用程序做任何想做的事情。这被称为沙箱技术,HOWTO GEEK 上有一篇不错的文章介绍了它。

沙盒是一个严密控制的环境,可以在其中运行程序。沙盒限制了代码的操作,只给予它必要的权限,而不会添加可能被滥用的额外权限。
例如,您的网络浏览器基本上在沙盒中运行您访问的网页。它们受到限制,只能在您的浏览器中运行并访问一组有限的资源 - 它们不能在未经允许的情况下查看您的网络摄像头或读取计算机的本地文件。如果您访问的网站没有进行沙箱隔离,则访问恶意网站就会像安装病毒一样危险。
正如他们所指出的那样,当您在浏览器中时,您已经处于沙盒中。如果您想编写可以从其中访问的应用程序,则需要在HTML、JavaScript等功能和限制范围内工作。
从您自己的 MSDN链接 中,您可以看到在Windows上,
“如果没有此键,则处理程序应用程序将无法启动。”

根据你的帖子,似乎Windows是你想要操作的系统。如果你想在另一个操作系统上进行此操作(或者其他人阅读此问题),方法将与你已经找到的不同(这些已经是Stack Overflow上的问题):

理论上,你可以为每个常用浏览器创建特定的插件或配置应用程序来执行完全自定义的操作。但是,你将需要相同的权限提升才能安装你的应用程序/插件,因此会重复发明轮子。此外,你还需要重新发明上述协议,并以某种方式预先分发应用程序以供安装。

有时候,当使用新的网络功能如摄像头访问和地理位置定位时,应用程序看起来会顺利地获得用户的浏览器体验。实际上,我们所看到的是一些新的JavaScript API,取代了Flash小应用和其他我们曾经需要通过第三方软件来控制的东西。
  • getUserMedia(或者根据浏览器不同可能是webkitGetUserMediamozGetUserMedia)允许使用来自网络摄像头和麦克风的媒体。浏览器在允许此操作之前已经实现了权限提示,但该应用程序仍然是一个JavaScript应用程序。
  • 地理位置API写入了HTML5标准here中,最简单的实现(JavaScript)如下:navigator.geolocation.getCurrentPosition(show_map);它仍然只是一个JavaScript库。如果您使用它,this site建议添加一些错误处理/回退等。它从IE 9开始可用。查看该链接以获取其他浏览器信息。
  • 您可以使用navigator.registerProtocolHandler(从Mozilla文档here阅读更多)。但是,除了内置协议(例如mailto),您需要处理与调用此函数的域相同的Web应用程序中的URI。要设置处理程序,其中协议burger在链接<a href="burger:cheeseburger">this</a>中将被处理,您可以编写:navigator.registerProtocolHandler("burger", "http://www.google.co.uk/?uri=%s", "Burger handler");您可以在W3C规范中找到更多信息,包括其他白名单方案,但您需要仔细选择要支持的浏览器,并确保目标受众可以使用此功能。每当我想确定浏览器支持情况时,我都喜欢引用CanIUse看起来Chrome和Firefox已经支持,而IE不支持。
  • 我刚刚发现了一种方法,可以通过添加协议处理程序在Ubuntu上增加类似这样的功能, 如果您假定能够让所有客户机在使用链接之前运行某些脚本(具有SUDO权限)。这就是Ubuntu中apt:链接调用软件包管理器的方式。由于这又回到了“创建安装脚本,可以编辑Windows解决方案中的MIME类型”的领域,因此我认为可以在此停止。

谢谢您的回复。当我们尝试使用摄像头或麦克风时,浏览器会询问并获得用户的授权,然后继续执行。我已经看到一些应用程序在获得用户批准后启动外部应用程序(在Chrome上)。我只是想知道是否有什么我遗漏了的东西。 - Naresh
我在底部添加了一些额外的项目,讨论了我认为你已经见过的功能。如果您有进一步的问题,请告诉我,但我认为现在已经涵盖了很多内容。 - Palu Macil
再次感谢。它只需要在Windows环境中工作。我已经尝试注册自定义URI并能够启动应用程序。我已经尝试启动Excel并且成功了。但是我无法打开任何工作表,因为它也将schemeschemename:path名称视为路径。有什么建议吗? - Naresh
我不完全理解这个评论。你是说你将一个URL方案与Excel关联,但你也想指定它打开的工作簿吗? - Palu Macil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接