Запуск моно-программы без ввода 'mono foo.exe'


13

При запуске программы .net в Ubuntu я должен набрать «mono foo.exe» вместо простого foo.exe или дважды щелкнуть значок. Есть ли способ просто запустить foo.exe?

Ответы:


17

Эта ссылка помогает? Бег Моно

Из Mono Project об использовании binfmt:

Регистрация .exe как неродных двоичных файлов (только для Linux)

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

Кроме того, этот механизм не работает в соответствии с инструкциями по развертыванию приложений .

Вы также можете внести изменения в масштабе всей системы и использовать binfmt, чтобы зарегистрировать исполняемые файлы как не собственные двоичные файлы. Затем, при попытке запустить exe-файл, ядро ​​запустит моно-интерпретатор для обработки команды. Binfmt также можно использовать для запуска исполняемых файлов Windows с использованием WINE или файлов Java .class с использованием JVM. Чтобы зарегистрировать exe с ядром:

Зарегистрируйтесь как root и включите модуль binfmt в вашем ядре с помощью этой команды:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Кроме того, вы можете добавить modprobeкоманду в свой /etc/rc.localзагрузочный скрипт, чтобы она выполнялась при загрузке.

Добавьте строку ниже в ваш /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

Обратите внимание, что это не изменит ваше ядро, а только модули, которые оно загружает при загрузке вашей системы. Другими словами, вы все равно можете обновить ядро, не беспокоясь о потере этих изменений. Точно так же вы можете обновить среду выполнения Mono, не затрагивая ни один из методов вызова, перечисленных в этом разделе.


+1 для опции binfmt_misc, которая является самым маленьким решением для Linux
mario

1
попал FATAL: Module binfmt not foundв 12.04
RiaD

10

Создайте скрипт запуска.

Откройте текстовый редактор, добавьте это:

#!/bin/bash
mono foo.exe &

В зависимости от настроек может потребоваться использовать полный путь к файлу foo.exe.

Сохраните файл, например, как foo.sh.

Сделайте его исполняемым:

sudo chmod a+x foo.sh

Теперь вы сможете запустить foo.exe двойным щелчком мыши foo.sh.



1

Я знаю, что это старый вопрос, но я нашел его через Google, и это заставило меня задуматься. Это серьезный взлом, но вы можете скачать

https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh

и добавьте в .bashrc следующее

source ~/.bash-preexec.sh
preexec() {
  if [[ $1 =~ [^\s]+\.exe$ ]]; then
    eval "$1() { return 1; }"
    export -f $1
    /usr/bin/mono $1
  fi
}
precmd() { [[ $1 =~ [^\s]+\.exe$ ]]; unset -f $1; }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.