Запуск монопрограми без набору тексту "mono foo.exe"


13

Під час запуску .net-програми на Ubuntu я повинен набрати "mono foo.exe" замість просто foo.exe або двічі клацнути по значку. Чи є спосіб просто запустити foo.exe?

Відповіді:


17

Чи допомагає це посилання? Біг Моно

З проекту Mono про використання binfmt:

Реєстрація .exe як не рідних бінарних файлів (лише для Linux)

Оскільки це специфічна для Linux функція, ми не рекомендуємо розробникам розгортати це рішення, оскільки це обмежило б переносимість своїх сценаріїв.

Окрім того, цей механізм не працює, як передбачалося в Посібниках щодо розгортання програми .

Ви також можете внести загальносистемні зміни та використовувати binfmt для реєстрації файлів exe як неродніх бінарних файлів. Потім, намагаючись запустити 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

Зауважте, що це не змінює ваше ядро, а лише модулі, які він завантажує при завантаженні системи. Іншими словами, ви все одно можете оновити своє ядро, не переживаючи про втрату цих змін. Аналогічно, ви можете оновити час виконання моно, не впливаючи на жоден із способів виклику, перелічених у цьому розділі.


+1 для варіанту binfmt_misc, який є найменшим Обійти на Linux
Маріо

1
потрапив FATAL: Module binfmt not found12.04
RiaD

10

Створіть сценарій запуску.

Відкрийте редактор простого тексту та додайте це:

#!/bin/bash
mono foo.exe &

Залежно від налаштувань, можливо, вам доведеться використовувати повний шлях для foo.exe.

Збережіть файл, наприклад, як foo.sh.

Зробіть його виконуваним:

sudo chmod a+x foo.sh

Тепер ви маєте змогу запустити foo.exe, двічі клацнувши foo.sh.


2

Ви можете пов’язати розширення файлу '.exe' в Nautilus, яке потрібно виконати /usr/bin/mono


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.