Chrome Native Messaging с Mono
На самом деле я пытаюсь запустить свой c# mono исполняемый файл в OSX с помощью Chrome Native Messaging.
До сих пор мне никогда не удавалось запустить исполняемый файл с 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 "$@"
Я постоянно получаю следующую ошибку:
" родной хост вышел."
Я попытался запустить файл sh, и он, кажется, работает хорошо (он читает записи в stdin)
1 / вероятно ли, что этот метод сработает, и я что-то упускаю ?
2 / есть ли другой способ запустить исполняемый файл с помощью Mono ? (Я пытался поместить непосредственно исполняемый путь в манифест, но он также не работает
3 / Если я использую что-то другое, чем Mono (python / C++), мне придется переработать мой исполняемый файл, и это может стоить много.
1 ответ:
1 / вероятно ли, что этот метод сработает, и я что-то упускаю
Да, это должно сработать. Я видел очень похожую установку с Java runtime, и я не вижу никаких причин, почему она не должна работать с MONO runtime.
2 / есть ли другой способ запустить исполняемый файл с помощью Mono ?
Я определенно рекомендую использовать абсолютные пути везде, где вы можете:
/absolute_path_to/mono /absolute_path_to/my_executable.exe3 / Должен ли я использовать что-то другое, чем Mono (python / C++)
Нет. Native messaging работает с любым исполняемым файлом, независимо от языка программирования, используемого для его создания.
Кстати: Mono может не запуститься, когда исполняемый файл создает исключение, которое не обрабатывается вашим кодом, но ваш скрипт
launch.sh"проглотит" сообщение об ошибке. Вероятно, вам следует перенаправить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В любом случае вы должны добавить возможности ведения журнала в свое приложение, если вы еще не сделали этого.
Comments