【问题标题】:Launch an exe from browser (Windows)从浏览器启动 exe (Windows)
【发布时间】:2015-09-09 06:56:49
【问题描述】:

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

this线程我了解到我需要实现asynchronous pluggable protocolsregistering an application to uri scheme

我想看看有没有其他的实现方式?

在我的场景中,我希望从客户端计算机启动现有应用程序。那么我可以将此应用程序注册到 uri 方案并使用它。

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

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

谢谢。

【问题讨论】:

    标签: javascript c# windows browser activex


    【解决方案1】:

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

    沙盒是一个严格控制的环境,程序可以在其中运行 跑步。沙盒限制了一段代码可以做什么,就像 无需添加额外权限即可根据需要获得许多权限 这可能会被滥用。

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

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

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

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

    您的帖子似乎表明 Windows 确实是您的相关目标操作系统。如果您想在另一个操作系统上执行此操作(或者如果其他人阅读此问题),方法将与您已经找到的不同(这些已经是 Stack Overflow 问题):

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

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

    • getUserMedia(或者可能是 webkitGetUserMediamozGetUserMedia,具体取决于浏览器)允许使用来自网络摄像头和麦克风的媒体。浏览器在允许之前已经实现了权限提示,但应用程序仍然是 JavaScript 应用程序。
    • Geolocation API 被写入 HTML5 标准here,最简单的实现 (JavaScript) 如下所示:navigator.geolocation.getCurrentPosition(show_map); 它仍然只是一个 JavaScript 库。如果您使用它,this site 会提到添加一些错误处理/回退等。它从 IE 9 开始可用。请参阅该链接以了解其他浏览器。
    • 您可以使用 navigator.registerProtocolHandler(从 Mozilla 文档中阅读更多 here)但是,除了内置协议(例如 mailto)之外,您还将考虑使用同一网络应用程序处理 URI域作为您调用此函数的位置。要设置处理程序以处理链接<a href="burger:cheeseburger">this</a> 中的协议汉堡,您可以编写:navigator.registerProtocolHandler("burger", "http://www.google.co.uk/?uri=%s", "Burger handler"); 您可以在W3C spec 找到更多信息,包括其他列入白名单的方案,但您需要做很多事情仔细挑选浏览器以支持并确保您的目标受众可以使用它。每当我想确定浏览器支持时,我喜欢参考CanIUseIt looks like Chrome and Firefox are in and IE is out.
    • 我刚刚找到了bolt on some functionality like this in Ubuntu by adding a protocol handler 的方法,如果您假设在使用链接之前能够让您的所有客户端计算机运行一些脚本(具有 SUDO 权限)。这就是 apt: Ubuntu 中的链接调用包管理器的方式。由于这又回到了 Windows 解决方案的“创建可以在注册表中编辑 MIME 类型的安装脚本”的领域,我想我可以在这里停下来。

    【讨论】:

    • 感谢您的回复。当我们尝试使用相机或麦克风时,浏览器只会请求批准然后继续。而且我已经看到一些应用程序在用户批准的情况下启动了外部应用程序(在 Chrome 上)。我只是想知道我是否缺少任何东西。
    • 我在底部添加了一些额外的项目符号,讨论我相信您已经看到的功能。如果您还有其他问题,请告诉我,但我认为这已经涵盖了很多内容。
    • 再次感谢。它只需要在windows环境下工作。我试图注册自定义 uri 并能够启动应用程序。我试图启动 excel,我能够。但我无法打开任何工作表,因为它也在考虑将 scheme 名称作为路径。有什么建议吗?
    • 我并不完全关注此评论。您是说您将 url 方案与 Excel 相关联,但您还想指定它打开的工作簿?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多