Exécuter un programme mono sans taper 'mono foo.exe'

13

Lors de l'exécution d'un programme .net sur Ubuntu, je dois taper "mono foo.exe" au lieu de simplement foo.exe ou double-cliquer sur l'icône. Existe-t-il un moyen d'exécuter simplement foo.exe?

dan gibson
la source

Réponses:

17

Ce lien est-il utile? Running Mono

Du projet Mono sur l'utilisation de binfmt:

Enregistrement de .exe en tant que fichiers binaires non natifs (Linux uniquement)

Comme il s'agit d'une fonctionnalité spécifique à Linux, nous déconseillons aux développeurs de déployer cette solution, car cela limiterait la portabilité de leurs scripts.

En outre, ce mécanisme ne fonctionne pas comme prévu par les directives de déploiement d'applications .

Vous pouvez également effectuer une modification à l'échelle du système et utiliser binfmt pour enregistrer les fichiers exe en tant que fichiers binaires non natifs. Ensuite, lors de la tentative de lancement d'un fichier exe, le noyau exécutera l'interpréteur mono pour gérer la commande. Binfmt peut également être utilisé pour lancer des exécutables Windows à l'aide de WINE ou des fichiers Java .class à l'aide d'une JVM. Pour enregistrer exe avec le noyau:

Devenez root et activez le module binfmt dans votre noyau avec cette commande:

sudo apt-get install binfmt-support
modprobe binfmt_misc

En outre, vous souhaiterez peut-être ajouter la modprobecommande à votre /etc/rc.localscript de démarrage, afin qu'elle soit exécutée au démarrage.

Ajoutez la ligne ci-dessous à votre /etc/fstabfichier:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Ensuite, demandez à votre système d'exécuter la commande suivante au démarrage:

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

Assurez-vous également de marquer vos fichiers .exe comme exécutables dans le système de fichiers:

chmod +x myprogram.exe

Notez que cela ne change pas votre noyau, juste les modules qu'il charge lorsque vous démarrez votre système. En d'autres termes, vous pouvez toujours mettre à jour votre noyau sans vous soucier de perdre ces modifications. De même, vous pouvez mettre à niveau votre runtime Mono sans affecter aucune des méthodes d'appel répertoriées dans cette section.

muru
la source
+1 pour l'option binfmt_misc, qui est la plus petite solution de contournement sous Linux
mario
1
arrivé le FATAL: Module binfmt not found12.04
RiaD
10

Créez un script de démarrage.

Ouvrez un éditeur de texte brut, ajoutez ceci:

#!/bin/bash
mono foo.exe &

Selon votre configuration, vous devrez peut-être utiliser le chemin d'accès complet pour foo.exe.

Enregistrez le fichier par exemple sous foo.sh.

Rendez-le exécutable:

sudo chmod a+x foo.sh

Vous devriez maintenant pouvoir démarrer foo.exe en double-cliquant foo.sh.

jg-faustus
la source
2

Vous pouvez associer l'extension de fichier «.exe» sur Nautilus pour être exécuté avec /usr/bin/mono

Jader Dias
la source
1

Je sais que c'est une vieille question mais je l'ai trouvée sur google et ça m'a fait réfléchir. Ceci est un hack majeur mais vous pouvez télécharger

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

à votre domicile et ajoutez ce qui suit à .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
la source