Menjalankan program mono tanpa mengetikkan 'mono foo.exe'

13

Saat menjalankan program .net di Ubuntu saya harus mengetikkan "mono foo.exe", bukan hanya foo.exe atau mengklik dua kali ikonnya. Apakah ada cara untuk menjalankan foo.exe?

dan Gibson
sumber

Jawaban:

17

Apakah tautan ini membantu? Running Mono

Dari Proyek Mono tentang penggunaan binfmt:

Mendaftarkan .exe sebagai binari non-asli (hanya Linux)

Karena ini adalah fitur khusus Linux, kami tidak menyarankan pengembang untuk menggunakan solusi ini, karena akan membatasi portabilitas skrip mereka.

Selain itu, mekanisme ini tidak berfungsi sebagaimana dimaksud oleh Pedoman Penerapan Aplikasi .

Anda juga dapat membuat perubahan di seluruh sistem, dan menggunakan binfmt untuk mendaftarkan file exe sebagai biner non-asli. Kemudian, ketika mencoba meluncurkan file exe, kernel akan menjalankan penerjemah tunggal untuk menangani perintah. Binfmt juga dapat digunakan untuk meluncurkan file executable Windows menggunakan WINE, atau file Java .class menggunakan JVM. Untuk mendaftarkan exe dengan kernel:

Menjadi root dan nyalakan modul binfmt di kernel Anda dengan perintah ini:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Selain itu, Anda mungkin ingin menambahkan modprobeperintah ke /etc/rc.localskrip boot Anda , sehingga akan dieksekusi saat boot.

Tambahkan baris di bawah ini ke /etc/fstabfile Anda :

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Kemudian, minta sistem Anda menjalankan perintah berikut saat boot:

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

Pastikan untuk menandai file .exe Anda sebagai executable dalam sistem file juga:

chmod +x myprogram.exe

Perhatikan bahwa ini tidak mengubah kernel Anda, hanya modul-modul yang dimuat ketika Anda mem-boot sistem Anda. Dengan kata lain, Anda masih dapat memutakhirkan kernel Anda tanpa khawatir kehilangan perubahan ini. Demikian pula, Anda dapat memutakhirkan runtime Mono Anda tanpa memengaruhi metode doa apa pun yang tercantum di bagian ini.

muru
sumber
+1 untuk opsi binfmt_misc, yang merupakan solusi terkecil di Linux
mario
1
masuk FATAL: Module binfmt not found12,04
RiaD
10

Buat skrip startup.

Buka editor teks biasa, tambahkan ini:

#!/bin/bash
mono foo.exe &

Bergantung pada pengaturan Anda, Anda mungkin perlu menggunakan path lengkap untuk foo.exe.

Simpan file misalnya sebagai foo.sh.

Jadikan itu dapat dieksekusi:

sudo chmod a+x foo.sh

Anda sekarang dapat memulai foo.exe dengan mengklik dua kali foo.sh.

jg-faustus
sumber
2

Anda dapat mengaitkan ekstensi file '.exe' di Nautilus untuk dieksekusi /usr/bin/mono

Jader Dias
sumber
1

Saya tahu ini adalah pertanyaan lama tetapi saya menemukannya melalui google dan itu membuat saya berpikir. Ini adalah retasan besar tetapi Anda dapat mengunduh

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

ke rumah Anda dan tambahkan yang berikut ini ke .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; }
nettux
sumber