【问题标题】:Native messaging host not starting when opening Chrome打开 Chrome 时本机消息传递主机未启动
【发布时间】:2014-11-20 15:04:50
【问题描述】:

我正在尝试制作一个与本机消息传递主机(即 EXE 文件)通信的页面操作扩展。

我已经安装了我的扩展程序,我看到它的 UI 按预期工作,但 EXE 没有启动。 除此之外,我是否需要自己做一些事情来启动它? :

port = chrome.runtime.connectNative(hostName);

我已经在注册表中安装了主机,如下所示:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo] @="C:\Users\me\Desktop\nativeMessaging\host\com.google.chrome.example.echo-win.json"

(我也手动添加了这个,因为 x86 和 x64 位版本的配置单元似乎很乱......)

主机清单文件:

{
  "name": "com.google.chrome.example.echo",
  "description": "Chrome Native Messaging API Example Host",
  "path": "native-messaging-example-host.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/",
    "*"
  ]
}

native-messaging-example-host.bat 里面我有:

MyExeName.exe

如您所见,我在allowed_origins 中添加了一个"*",以防其他选项不适用于页面操作。

我也尝试将 EXE 名称直接放在清单文件中,但再次失败。

我仍然得到一个:

Specified native messaging host not found. 

我还检查了 ProccessExplorer 以查看 Chrome 加载了哪些应用程序,以防它被加载,但我也看不到它。

奇怪的是,我已经开始修改来自 Google 的本机消息传递主机示例,并且我认为它可以作为一个应用程序运行。当我把它变成一个页面操作扩展时它停止工作了。

有人知道这里出了什么问题吗?

【问题讨论】:

  • allowed_origins 中不能有通配符。 “未找到指定的本机消息传递主机。”是一般错误。如果您查看 Chrome 的 stderr,您会看到什么?参见例如chromium.org/for-testers/enable-logging
  • 谢谢!在尝试enable-logging 并查看其日志后,我发现了两个错误(JSON 中有一个额外的逗号和您提到的不支持的通配符)。现在它似乎工作了!
  • 现在我得到一个:Error when communicating with the native messaging host.,这似乎更容易修复 - 我认为。
  • Windows 批处理脚本并不完全适合用于本地消息传递的(脚本)语言...尝试 C、C++、C#、Python 或任何其他语言,但不是 Windows 批处理。
  • 是的,BAT 仅用于测试目的。我现在有一个 C++ 应用程序,我正在尝试从主机获得正确的响应,遵循以下主题:stackoverflow.com/questions/24775096/…。也感谢您在那里的有用回答。 :)

标签: google-chrome-extension chrome-native-messaging


【解决方案1】:

除了开启日志,你还可以采取使用 sysinternals 中的 procmon 的方法。它就像 regmon 和 filemon 合二为一,因此您可以按照 chrome 查询注册表项,然后读取清单,然后运行可执行文件,您可以看到哪里出错了。

我之前遇到了一个问题,exe无法运行,通过上面的操作,我发现key中有一个小错字,我错过了。

要启用日志记录,请查看以下内容:https://www.chromium.org/for-testers/enable-logging 例如您可以使用以下命令行参数启动浏览器:--vmodule=extension_updater=2 --enable-logging

【讨论】:

    【解决方案2】:

    我遇到了类似的问题:chrome 正在创建端口,但没有启动程序。使用 Sysinternals procmon.exe 进行跟踪我发现调用 C:\Programs\TCCLE\tcc.exe 时活动会停止。我使用Take Command 作为cmd.exe 替换和环境变量ComSpec 设置为C:\Programs\TCCLE\tcc.exe;我把ComSpec改回C:\WINDOWS\system32\cmd.exe,程序就启动了。

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题。启用日志记录没有帮助。原来在我的注册表项中:

      [HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts

      我在 EXE 和路径周围有引号,例如"C:\Temp\Chrome\ChromeNativeApp.exe" 与 C:\Temp\Chrome\ChromeNativeApp.exe

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题。这里没有任何帮助。使问题消失的原因是将主机名称从“com.me.DbServer”更改为“com.me.test”。这种变化使一切突然起作用。我想要么 DbServer 是保留名称,要么更可能不允许使用大写字母。我正在使用 Chrome 69。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-22
          • 2019-02-24
          • 1970-01-01
          • 2021-02-07
          • 2016-02-02
          相关资源
          最近更新 更多