从浏览器启动exe(Windows)

时间:2015-06-23 12:55:47

标签: javascript c# windows browser activex

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

this帖子我了解到我需要实施asynchronous pluggable protocolsregistering an application to uri scheme

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

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

我唯一担心的是我们必须对两种情况(或至少第二种情况)进行注册表更改。如果注册表设置不存在,则无效。

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

感谢。

2 个答案:

答案 0 :(得分:6)

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

  

沙箱是一个严格控制的环境,程序可以在这里   跑。沙箱限制了一段代码可以做的事情,就像它一样   在不添加其他权限的情况下需要许多权限   这可能会被滥用。

     

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

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

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

  

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

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

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

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

  • getUserMedia(或者可能是webkitGetUserMediamozGetUserMedia,具体取决于浏览器)允许使用来自网络摄像头和麦克风的媒体。浏览器在允许之前已经实现了权限提示,但该应用程序仍然是一个JavaScript应用程序。
  • Geolocation API写入HTML5标准here,最简单的实现(JavaScript)如下所示:navigator.geolocation.getCurrentPosition(show_map);它仍然只是一个JavaScript库。如果您使用它,this site提到添加一些错误处理/回退等。它从IE 9开始可用。请参阅其他浏览器的链接。
  • 您可以使用navigator.registerProtocolHandler(从Mozilla文档中了解更多here)但是,除了内置协议(例如mailto)之外,您还将考虑使用与您调用此功能的域相同的Web应用程序。要设置处理链接<a href="burger:cheeseburger">this</a>中协议汉堡的处理程序,您可以写:navigator.registerProtocolHandler("burger", "http://www.google.co.uk/?uri=%s", "Burger handler");您可以在W3C spec找到更多信息,包括其他列入白名单的方案,但您可以# 39; d需要仔细挑选浏览器以支持并确保您的目标受众可以使用它。每当我想确定浏览器支持时,我都想引用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 IF 的方法,您可以在使用链接之前让所有客户端计算机运行某些脚本(具有SUDO权限)。这就是apt:Ubuntu中的链接调用包管理器。因为这回到了#34;创建一个可以在注册表中编辑MIME类型的安装脚本。对于Windows解决方案,我想我可以就此止步。

答案 1 :(得分:6)

在Windows中,应用程序的指定协议可以在Registry中注册。 在此msdn doc节目中将应用程序注册到URI方案。

例如,可执行文件&#39; alert.exe&#39;即将开始。可以注册以下项目。

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>