Ejecutar un programa mono sin escribir 'mono foo.exe'

13

Cuando ejecuto un programa .net en Ubuntu, tengo que escribir "mono foo.exe" en lugar de simplemente foo.exe o hacer doble clic en el icono. ¿Hay alguna forma de ejecutar foo.exe?

dan gibson
fuente

Respuestas:

17

¿Ayuda este enlace? Running Mono

Del Proyecto Mono sobre el uso de binfmt:

Registro de .exe como binarios no nativos (solo Linux)

Debido a que esta es una característica específica de Linux, no recomendamos que los desarrolladores implementen esta solución, ya que limitaría la portabilidad de sus scripts.

Además, este mecanismo no funciona según lo previsto en las Directrices de implementación de aplicaciones .

También puede hacer un cambio en todo el sistema y usar binfmt para registrar los archivos exe como binarios no nativos. Luego, cuando intente iniciar un archivo exe, el kernel ejecutará el intérprete mono para manejar el comando. Binfmt también se puede usar para iniciar ejecutables de Windows usando WINE o archivos Java .class usando una JVM. Para registrar exe con el kernel:

Conviértase en root y encienda el módulo binfmt en su núcleo con este comando:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Además, es posible que desee agregar el modprobecomando a su /etc/rc.localscript de arranque, para que se ejecute en el arranque.

Agregue la siguiente línea a su /etc/fstabarchivo:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Luego, haga que su sistema ejecute el siguiente comando en el arranque:

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

Asegúrese de marcar sus archivos .exe como ejecutables en el sistema de archivos también:

chmod +x myprogram.exe

Tenga en cuenta que esto no cambia su núcleo, solo los módulos que carga cuando inicia su sistema. En otras palabras, aún puede actualizar su kernel sin preocuparse por perder estos cambios. Del mismo modo, puede actualizar su tiempo de ejecución Mono sin afectar ninguno de los métodos de invocación enumerados en esta sección.

muru
fuente
+1 para la opción binfmt_misc, que es la solución más pequeña en Linux
mario
1
conseguido FATAL: Module binfmt not founden 12.04
Riad
10

Crea un script de inicio.

Abra un editor de texto sin formato, agregue esto:

#!/bin/bash
mono foo.exe &

Dependiendo de su configuración, es posible que deba usar la ruta completa para foo.exe.

Guarde el archivo, por ejemplo, como foo.sh.

Hazlo ejecutable:

sudo chmod a+x foo.sh

Ahora debería poder iniciar foo.exe haciendo doble clic foo.sh.

jg-faustus
fuente
2

Puede asociar la extensión de archivo '.exe' en Nautilus para que se ejecute con /usr/bin/mono

Jader Dias
fuente
1

Sé que esta es una vieja pregunta, pero la encontré a través de Google y me hizo pensar. Este es un gran truco, pero puedes descargar

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

a su hogar y agregue lo siguiente 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; }
nettux
fuente