Chrome 使用 Mono 进行本地消息传递

Chrome Native Messaging with Mono

我实际上正在尝试使用 Chrome 本机消息在 OSX 中启动我的 C# mono 可执行文件。

到目前为止,我一直无法使用 OSX 启动可执行文件(它在 Windows 上运行良好)

这是本机消息传递主机的清单:

{
   "allowed_origins" : 
    [ 
        "chrome-extension://njbimgehbcecolchhhfpamfobkedoein/"
    ],
   "description" : "test native messaging host",
   "name" : "com.myapp.native.host",
   "path" : "/Applications/myapp/launch.sh",
   "type" : "stdio"
}

这是 launch.sh 文件:

#!/bin/bash
/usr/local/bin/mono --runtime=v4.0.30319 my_executable.exe "$@"

我经常收到以下错误:

"Native host has exited."

我尝试启动 sh 文件,它似乎运行良好(它读取标准输入中的条目)

1/ 这种方法是否可行,我遗漏了什么? 2/是否有另一种使用 Mono 启动可执行文件的方法? (我尝试直接将可执行路径放在清单上,但它也不起作用 3/ 如果我使用 Mono 以外的东西(python / C++),我将不得不重新编写我的可执行文件,这可能会花费很多。

1/ Is this method likely to work, and I'm missing something

是的,应该可以。我已经看到与 JAVA 运行时非常相似的设置,但我看不出有任何理由不能使用 MONO 运行时。

2/ Is there another way to launch an executable using Mono ?

我强烈建议尽可能使用绝对路径:

/absolute_path_to/mono /absolute_path_to/my_executable.exe

3/ Should I use something else than Mono (python / C++)

没有。本机消息传递适用于任何可执行文件,无论用于创建它的编程语言如何。


顺便说一句:当您的可执行文件抛出您的代码未处理的异常但您的 launch.sh 脚本将 "swallow" 错误消息时,Mono 可能无法启动。您应该像这样重定向 STDERR 到日志文件:

#!/bin/bash
/absolute_path_to/mono --runtime=v4.0.30319 /absolute_path_to/my_executable.exe "$@" 2> /absolute_path_to/my_executable.log

如果 STDERR 没有提供有用的信息,您也可以尝试重定向 STDOUT(我知道本机消息传递需要它,但您正在调试问题吗?)像这样:

#!/bin/bash
/absolute_path_to/mono --runtime=v4.0.30319 /absolute_path_to/my_executable.exe "$@" > /absolute_path_to/my_executable.log 2>&1

无论如何,如果您还没有添加日志记录功能,您应该这样做。