Встроенный обмен сообщениями Chrome с Mono

На самом деле я пытаюсь запустить свой монофонический исполняемый файл C # в OSX с помощью встроенного обмена сообщениями Chrome.

До сих пор мне ни разу не удавалось запустить исполняемый файл с 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 ++), мне придется переработать свой исполняемый файл, и это может стоить дорого.


person Thordax    schedule 05.07.2016    source источник


Ответы (1)


1 / Вероятно, этот метод сработает, и я что-то упускаю

Да, должно работать. Я видел очень похожую настройку со средой выполнения JAVA, и я не вижу причин, по которым она не должна работать со средой выполнения MONO.

2 / Есть ли другой способ запустить исполняемый файл с помощью Mono?

Я определенно рекомендую использовать абсолютные пути везде, где вы можете:

/absolute_path_to/mono /absolute_path_to/my_executable.exe

3 / Следует ли мне использовать что-то еще, кроме Mono (python / C ++)

Нет. Встроенный обмен сообщениями работает с любым исполняемым файлом независимо от языка программирования, на котором он был создан.


Кстати: 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

В любом случае вам следует добавить возможности ведения журнала в свое приложение, если вы еще этого не сделали.

person jariq    schedule 06.07.2016
comment
Большое спасибо за быстрый и исчерпывающий ответ. Кстати, в настоящее время я использую вашу замечательную Dll PKCS11Interop, так что большое спасибо за отличную работу! - person Thordax; 06.07.2016
comment
@Thordax: Это здорово. Я рада что тебе нравиться. - person jariq; 06.07.2016