Как установить удар для выполнения *.exe с моно?

Традиционный метод выполнить это состоял бы в том, чтобы иметь Вашу проверку сценария на существование файла в /var/run когда это запускается, если ни один не существует, затем создают тот, содержащий его собственный PID. На завершении сценарий удалил бы этот файл. Если файл действительно существует, сценарий просто выходит. Таким образом независимо от того, как часто сценарий называют, он только выполнит свой основной код, если он не будет уже работать.

Проблема с этим подходом состоит в том, что грязное завершение оставляет этот подарок файла в системе, таким образом, это часто увеличивается с проверкой, чтобы видеть, существует ли указанный PID и ли, что PID для корректного сценария.

Этот метод действительно требует, чтобы Вы изменили свой сценарий вместо того, чтобы просто исправить Ваш crontab запись, но освященный веками механизм для решения этого вида проблемы.

7
07.09.2012, 06:35
3 ответа

Bash не имеет такой функции. Zsh делает, можно настроить псевдонимы на основе расширений:

alias -s exe=mono

Это только работало бы в интерактивной оболочке, однако, не, когда программа вызывает другого.

В соответствии с Linux, можно настроить выполнение внешних двоичных файлов через binfmt_misc механизм; посмотрите Rolf Bjarne Kvinge. Хорошие дистрибутивы Linux настраивают это автоматически как часть моно пакета во время выполнения.

Если Вы не можете использовать binfmt_misc, потому что у Вас нет корневых полномочий, необходимо будет согласиться на сценарии обертки.

#!/bin/sh
exec /path/to/mono "$0.exe" "$@"

Поместите сценарий обертки в тот же каталог как .exe файл, с тем же именем без .exe.

8
27.01.2020, 20:15

Это возможно:

  • Станьте корнем и включите binfmt модуль в Вашем ядре с этой командой (можно хотеть добавить эту команду к сценарию начальной загрузки/etc/rc.local, так, чтобы это было выполнено на начальной загрузке):

    modprobe binfmt

  • Добавьте строку ниже к Вашему/etc/fstab файлу:

    binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

  • Затем имейте свою систему, выполняет следующую команду на начальной загрузке:

    echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register

  • Обязательно отметьте Ваши .exe файлы как исполняемый файл в файловой системе также:

    chmod +x myprogram.exe

(отсюда: http://mono-project.com/Guide)

Обратите внимание, что это не рекомендуемый путь, прочитайте вышеупомянутую страницу Guide и также страницу о том, как сделать развертывание приложения для моно приложений.

6
27.01.2020, 20:15
  • 1
    , который я вижу, действительно я лучше, делает загрузчик для каждого .exe, в котором я нуждаюсь –  cnd 06.09.2012, 11:28

Вы смогли встраивать файл в сценарии удара с помощью следующего руководства http://www.linuxjournal.com/content/add-binary-payload-your-shell-scripts

2
27.01.2020, 20:15

Теги

Похожие вопросы