Executando um programa mono sem digitar 'mono foo.exe'

13

Ao executar um programa .net no Ubuntu, tenho que digitar "mono foo.exe" em vez de apenas foo.exe ou clicar duas vezes no ícone. Existe alguma maneira de apenas executar o foo.exe?

dan gibson
fonte

Respostas:

17

Este link ajuda? Running Mono

No Projeto Mono sobre o uso do binfmt:

Registrando .exe como binários não nativos (somente Linux)

Como esse é um recurso específico do Linux, não recomendamos que os desenvolvedores implantem essa solução, pois isso limitaria a portabilidade de seus scripts.

Além disso, esse mecanismo não funciona conforme planejado pelas Diretrizes de implantação de aplicativos .

Você também pode fazer uma alteração em todo o sistema e usar o binfmt para registrar os arquivos exe como binários não nativos. Então, ao tentar iniciar um arquivo exe, o kernel executará o interpretador mono para manipular o comando. O Binfmt também pode ser usado para iniciar os executáveis ​​do Windows usando arquivos WINE ou Java .class usando uma JVM. Para registrar o exe no kernel:

Torne-se root e ative o módulo binfmt no seu kernel com este comando:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Além disso, convém adicionar o modprobecomando ao seu /etc/rc.localscript de inicialização, para que seja executado na inicialização.

Adicione a linha abaixo ao seu /etc/fstabarquivo:

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Em seguida, faça com que seu sistema execute o seguinte comando na inicialização:

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

Certifique-se de marcar também os arquivos .exe como executáveis ​​no sistema de arquivos:

chmod +x myprogram.exe

Note que isso não muda o seu kernel, apenas os módulos que ele carrega quando você inicializa o sistema. Em outras palavras, você ainda pode atualizar seu kernel sem se preocupar em perder essas alterações. Da mesma forma, você pode atualizar seu tempo de execução Mono sem afetar nenhum dos métodos de chamada listados nesta seção.

muru
fonte
+1 para a opção binfmt_misc, que é a menor solução alternativa no Linux
mario
1
entrou FATAL: Module binfmt not foundem 12.04
RiaD 17/08/2012
10

Crie um script de inicialização.

Abra um editor de texto sem formatação, adicione isto:

#!/bin/bash
mono foo.exe &

Dependendo da sua configuração, pode ser necessário usar o caminho completo para foo.exe.

Salve o arquivo, por exemplo, como foo.sh.

Torne executável:

sudo chmod a+x foo.sh

Agora você deve conseguir iniciar o foo.exe clicando duas vezes foo.sh.

jg-faustus
fonte
2

Você pode associar a extensão de arquivo '.exe' no Nautilus para ser executada com /usr/bin/mono

Jader Dias
fonte
1

Eu sei que essa é uma pergunta antiga, mas eu a encontrei no google e isso me fez pensar. Este é um grande truque, mas você pode baixar

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

à sua casa e adicione o seguinte 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
fonte