Uruchamianie programu mono bez wpisywania „mono foo.exe”


13

Podczas uruchamiania programu .net na Ubuntu muszę wpisać „mono foo.exe” zamiast po prostu foo.exe lub dwukrotne kliknięcie ikony. Czy jest jakiś sposób na uruchomienie foo.exe?

Odpowiedzi:


17

Czy ten link pomaga? Uruchamianie Mono

Z Mono Project na temat używania binfmt:

Rejestrowanie pliku .exe jako niepatywnych plików binarnych (tylko Linux)

Ponieważ jest to funkcja specyficzna dla systemu Linux, nie zalecamy programistom wdrażania tego rozwiązania, ponieważ ograniczyłoby to przenośność ich skryptów.

Ponadto ten mechanizm nie działa zgodnie z założeniami Wytycznych dotyczących wdrażania aplikacji .

Możesz także dokonać zmiany ogólnosystemowej i użyć binfmt do zarejestrowania plików exe jako binarnych plików binarnych. Następnie, podczas próby uruchomienia pliku exe, jądro uruchomi interpreter mono do obsługi polecenia. Binfmt może być również używany do uruchamiania plików wykonywalnych systemu Windows za pomocą WINE lub plików .class Java za pomocą JVM. Aby zarejestrować plik exe w jądrze:

Zostań rootem i włącz moduł binfmt w jądrze za pomocą tego polecenia:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Ponadto możesz dodać modprobepolecenie do /etc/rc.localskryptu rozruchowego, aby było ono wykonywane podczas rozruchu.

Dodaj poniższy wiersz do /etc/fstabpliku:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Następnie uruchom w systemie następujące polecenie podczas uruchamiania:

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

Pamiętaj, aby oznaczyć pliki .exe również jako pliki wykonywalne w systemie plików:

chmod +x myprogram.exe

Zauważ, że to nie zmienia twojego jądra, tylko moduły ładowane podczas uruchamiania systemu. Innymi słowy, możesz nadal aktualizować jądro, nie martwiąc się o utratę tych zmian. Podobnie możesz zaktualizować środowisko wykonawcze Mono bez wpływu na którąkolwiek z metod wywoływania wymienionych w tej sekcji.


+1 za opcję binfmt_misc, która jest najmniejszym obejściem w systemie Linux
Mario

1
dostał się FATAL: Module binfmt not foundw 12.04
RiaD

10

Utwórz skrypt startowy.

Otwórz zwykły edytor tekstu, dodaj to:

#!/bin/bash
mono foo.exe &

W zależności od konfiguracji może być konieczne użycie pełnej ścieżki do pliku foo.exe.

Zapisz plik na przykład jako foo.sh.

Spraw, by był wykonywalny:

sudo chmod a+x foo.sh

Powinieneś być teraz w stanie uruchomić foo.exe klikając dwukrotnie foo.sh.


2

Można powiązać rozszerzenie pliku „.exe” na Nautilusie, z którym ma zostać wykonane /usr/bin/mono


1

Wiem, że to stare pytanie, ale znalazłem je za pośrednictwem Google i przyszło mi to do głowy. Jest to poważny hack, ale można pobrać

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

do swojego domu i dodaj następujące .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; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.