从浏览器启动exe(Windows)

Nar*_*esh 3 javascript c# browser windows activex

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

这个线程我明白我需要实现异步可插入协议并将应用程序注册到uri方案.

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

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

我唯一担心的是我们必须进行注册表更改的场景(或至少第二种场景).如果注册表设置不存在,这将无法正常工作.

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

谢谢.

ash*_*raz 7

在Windows中,应用程序的指定协议可以在注册表中注册.在这个msdn doc中显示了将应用程序注册到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"
Run Code Online (Sandbox Code Playgroud)

然后你可以编写一个html进行测试

<head>
    <title>alter</title>
</head>

<body>
    <a href="alert:" >alert</a>
<body>
Run Code Online (Sandbox Code Playgroud)


Pal*_*cil 6

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

沙箱是一个严格控制的环境,可以运行程序.沙箱限制了一段代码可以执行的操作,为其提供所需的权限,而无需添加可能被滥用的其他权限.

例如,您的Web浏览器基本上运行您在沙箱中访问的网页.它们仅限于在您的浏览器中运行并访问有限的资源 - 他们无法在未经许可的情况下查看您的网络摄像头或阅读您计算机的本地文件.如果您访问的网站没有沙盒并与系统的其他部分隔离,则访问恶意网站与安装病毒一样糟糕.

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

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

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

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

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

此外,有时看起来应用程序在使用网络摄像头访问和地理定位等新的网络功能时可以顺利访问用户的浏览器体验.我们实际看到的是一些新的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已经出局了.
  • 通过添加协议处理程序找到了一种在Ubuntu中使用这种功能的方法,如果你假设能够在使用链接之前让所有客户端机器运行一些脚本(具有SUDO权限).这就是apt:Ubuntu中的链接调用包管理器.由于这回到了"为Windows解决方案创建可以在注册表中编辑MIME类型的安装脚本"的领域,我想我可以在这里停下来.