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?
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?
Antworten:
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 modprobe
Befehl zu Ihrem /etc/rc.local
Boot-Skript hinzufügen , damit er beim Booten ausgeführt wird.
Fügen Sie die folgende Zeile zu Ihrer /etc/fstab
Datei 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.
FATAL: Module binfmt not found
am 12.04.
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
.
Sie können die Dateierweiterung '.exe' auf Nautilus verknüpfen, die ausgeführt werden soll /usr/bin/mono
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; }