5

我尽我所能遵循本机消息传递文档,但似乎无法让我的本机 .NET 应用程序甚至开始在 Windows 上运行。在寻找其他信息时,我注意到有些事情没有记录且不清楚。

首先,文档没有提到添加“nativeMessaging”权限的要求。改变这个之后,我走得更远了;Chrome 现在实际上在气球弹出窗口中提到了“添加了新的后台应用程序”。

但是,无论我尝试了哪些操作,以下代码都会立即断开连接。

var port = chrome.runtime.connectNative( ... );
port.onDisconnect.addListener(
    function()
    {
        console.log( "Disconnected" );
    } );

根据我调试这个东西的尝试,我有几个问题:

  1. 在 Windows 上,Chrome 何时尝试从注册表中的 NativeMessagingHosts 加载清单?换句话说,我应该在更改值时重新启动 Chrome,还是在"chrome://extensions/"中重新加载扩展程序就足够了?
  2. 注册表中的绝对路径,应该如何格式化?例如,我看到人们只使用“\\\\”斜杠作为路径分隔符。它需要周围的引号吗?
  3. 有什么方法可以获取有关问题所在的更多信息?出于测试目的,我重命名了注册表项以查看是否会收到不同的错误(假设因为它无法加载它会通知我)。相反,似乎仍然调用了“onDisconnect” 。
  4. 与注册表中的路径类似,注册表值指向的原生应用清单文件中指向原生应用的相对路径应该如何格式化?(文档中有一个这样的例子,但只是为了确定什么有效,什么无效......)

我现在似乎有太多变量无法调试它,并且没有立即看到我如何验证我的注册表值是否至少设置正确。

4

1 回答 1

3

我得到了它的工作,并想我会尝试以尽可能多的不同方式再次打破我的解决方案来回答我最初提出的问题。但是,我不记得/不知道为什么它以前不起作用。事实上,它是在我放弃之后才开始工作的;由于安装了更新(34.0.1847.116 m),我不得不重新启动 Chrome,之后突然我的本机应用程序出现了,因为我正在使用的插件仍然处于启用状态。

除此之外,以下是通过更改某些内容并查看本机应用程序是否仍然启动来了解哪些功能有效和无效的报告。

1. 在 Windows 上,Chrome 何时尝试从NativeMessagingHosts注册表中加载清单?

每当您在“chrome://extensions/”中开发的扩展程序上单击“重新加载”时,都会从注册表中再次加载本机主机。换句话说,只需单击重新加载即可验证您的清单文件和注册表是否设置正确。

2、注册表中的绝对路径,应该如何格式化?

这是有效注册表值的示例:

C:\Users\Bleh\Some\Path 即使有空格\No\Problem\someManifestFile.json

  • 没有周围的引号。
  • 使用单个反斜杠,正斜杠,甚至无限数量的斜杠也是如此。:O 例如"C:\Some\\\Very Weird\Path"
  • “.json”扩展名是必需的。
  • 它必须是绝对的。

3. 有什么方法可以获取更多关于问题所在的信息?

好吧,您也许可以查看 Chromium 的源代码以确定发生了什么,但除此之外,我看不到您可以从提供的 API 中获得任何更广泛的反馈。

4、manifest中的路径应该如何格式化? 文档中的示例,这似乎是正确的:

“路径”:“C:\\程序文件\\我的应用程序\\chrome_native_messaging_host.exe”

  • 需要两个反斜杠作为分隔符。
  • 路径可以是相对的。
于 2014-04-10T16:50:20.087 回答