Esecuzione di un programma mono senza digitare "mono foo.exe"


13

Quando eseguo un programma .net su Ubuntu devo digitare "mono foo.exe" anziché semplicemente foo.exe o fare doppio clic sull'icona. C'è un modo per eseguire solo foo.exe?

Risposte:


17

Questo link aiuta? Running Mono

Dal progetto Mono sull'uso di binfmt:

Registrazione di .exe come binari non nativi (solo Linux)

Poiché questa è una funzionalità specifica di Linux, non è consigliabile che gli sviluppatori distribuiscano questa soluzione, poiché limiterebbe la portabilità dei loro script.

Inoltre, questo meccanismo non funziona come previsto dalle Linee guida per la distribuzione delle applicazioni .

È inoltre possibile apportare una modifica a livello di sistema e utilizzare binfmt per registrare i file exe come file binari non nativi. Quindi, quando si tenta di avviare un file exe, il kernel eseguirà l'interprete mono per gestire il comando. Binfmt può anche essere usato per lanciare file eseguibili di Windows usando WINE o file .class Java usando una JVM. Per registrare exe con il kernel:

Diventa root e attiva il modulo binfmt nel tuo kernel con questo comando:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Inoltre, potresti voler aggiungere il modprobecomando allo /etc/rc.localscript di avvio, in modo che venga eseguito all'avvio.

Aggiungi la riga seguente al tuo /etc/fstabfile:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Quindi, fai in modo che il tuo sistema esegua il seguente comando all'avvio:

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

Assicurati di contrassegnare i tuoi file .exe come eseguibili anche nel filesystem:

chmod +x myprogram.exe

Nota che questo non cambia il tuo kernel, ma solo i moduli che carica all'avvio del tuo sistema. In altre parole, puoi comunque aggiornare il tuo kernel senza preoccuparti di perdere queste modifiche. Allo stesso modo, puoi aggiornare il tuo runtime Mono senza influire su nessuno dei metodi di chiamata elencati in questa sezione.


+1 per l'opzione binfmt_misc, che è la soluzione più piccola su Linux
mario

1
ottenuto il FATAL: Module binfmt not found12.04
RiaD il

10

Crea uno script di avvio.

Apri un semplice editor di testo, aggiungi questo:

#!/bin/bash
mono foo.exe &

A seconda della configurazione, potrebbe essere necessario utilizzare il percorso completo per foo.exe.

Salvare il file ad esempio come foo.sh.

Renderlo eseguibile:

sudo chmod a+x foo.sh

Ora dovresti essere in grado di avviare foo.exe facendo doppio clic foo.sh.


2

È possibile associare l'estensione del file '.exe' su Nautilus con cui eseguire /usr/bin/mono


1

So che questa è una vecchia domanda, ma l'ho trovata tramite Google e mi ha fatto pensare. Questo è un grande trucco ma puoi scaricarlo

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

a casa tua e aggiungi quanto segue a .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; }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.