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
无论如何,如果您还没有添加日志记录功能,您应该这样做。
我实际上正在尝试使用 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
无论如何,如果您还没有添加日志记录功能,您应该这样做。