Ausführen eines Monoprogramms ohne Eingabe von "mono foo.exe"

13

Wenn ich ein .net-Programm unter Ubuntu starte, muss ich "mono foo.exe" anstelle von "foo.exe" eingeben oder auf das Symbol doppelklicken. Gibt es eine Möglichkeit, einfach foo.exe auszuführen?

Dan Gibson
quelle

Antworten:

17

Hilft dieser Link? Mono ausführen

Ab dem Mono-Projekt mit binfmt:

Registrieren von .exe als nicht native Binärdateien (nur Linux)

Da es sich um eine Linux-spezifische Funktion handelt, empfehlen wir Entwicklern nicht, diese Lösung bereitzustellen, da dies die Portabilität ihrer Skripts einschränken würde.

Darüber hinaus funktioniert dieser Mechanismus nicht wie in den Richtlinien zur Anwendungsbereitstellung vorgesehen .

Sie können auch systemweit Änderungen vornehmen und binfmt verwenden, um die exe-Dateien als nicht native Binärdateien zu registrieren. Wenn Sie dann versuchen, eine exe-Datei zu starten, führt der Kernel den Mono-Interpreter aus, um den Befehl zu verarbeiten. Binfmt kann auch zum Starten von ausführbaren Windows-Dateien mit WINE oder von Java-Klassendateien mit einer JVM verwendet werden. Um exe beim Kernel zu registrieren:

Melden Sie sich als root an und aktivieren Sie das binfmt-Modul in Ihrem Kernel mit folgendem Befehl:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Außerdem können Sie den modprobeBefehl zu Ihrem /etc/rc.localBoot-Skript hinzufügen , damit er beim Booten ausgeführt wird.

Fügen Sie die folgende Zeile zu Ihrer /etc/fstabDatei hinzu:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Lassen Sie dann Ihr System den folgenden Befehl beim Booten ausführen:

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

Stellen Sie sicher, dass Ihre .exe-Dateien auch im Dateisystem als ausführbar markiert sind:

chmod +x myprogram.exe

Beachten Sie, dass dies nicht Ihren Kernel ändert, sondern nur die Module, die er lädt, wenn Sie Ihr System starten. Mit anderen Worten, Sie können Ihren Kernel trotzdem aktualisieren, ohne sich Sorgen machen zu müssen, dass diese Änderungen verloren gehen. Ebenso können Sie Ihre Mono-Laufzeit aktualisieren, ohne eine der in diesem Abschnitt aufgeführten Aufrufmethoden zu beeinflussen.

muru
quelle
+1 für binfmt_misc-Option, die die kleinste
Problemumgehung unter
1
stieg FATAL: Module binfmt not foundam 12.04.
RiaD
10

Erstellen Sie ein Startskript.

Öffnen Sie einen Nur-Text-Editor und fügen Sie Folgendes hinzu:

#!/bin/bash
mono foo.exe &

Abhängig von Ihrem Setup müssen Sie möglicherweise den vollständigen Pfad für foo.exe verwenden.

Speichern Sie die Datei zum Beispiel als foo.sh.

Mach es ausführbar:

sudo chmod a+x foo.sh

Sie sollten jetzt in der Lage sein, foo.exe durch Doppelklicken zu starten foo.sh.

jg-faustus
quelle
2

Sie können die Dateierweiterung '.exe' auf Nautilus verknüpfen, die ausgeführt werden soll /usr/bin/mono

Jader Dias
quelle
1

Ich weiß, dass dies eine alte Frage ist, aber ich habe sie über Google gefunden und darüber nachgedacht. Dies ist ein großer Hack, aber Sie könnten herunterladen

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

zu Ihnen nach Hause und fügen Sie Folgendes zu .bashrc hinzu

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
quelle