「mono foo.exe」を入力せずにモノプログラムを実行する


13

Ubuntuで.netプログラムを実行するときは、foo.exeだけでなく、アイコンをダブルクリックする代わりに、「mono foo.exe」と入力する必要があります。foo.exeを実行する方法はありますか?

回答:


17

このリンクは役に立ちますか?ランニングモノ

binfmtの使用に関するMonoプロジェクトから:

.exeを非ネイティブバイナリとして登録する(Linuxのみ)

これはLinux固有の機能であるため、スクリプトの移植性を制限するため、開発者がこのソリューションを展開することはお勧めしません。

また、このメカニズムは、アプリケーション展開ガイドラインで意図されたとおりに機能しません。

システム全体に変更を加えて、binfmtを使用して、exeファイルを非ネイティブバイナリとして登録することもできます。次に、exeファイルを起動しようとすると、カーネルはモノインタープリターを実行してコマンドを処理します。Binfmtは、WINEを使用したWindows実行可能ファイル、またはJVMを使用したJava .classファイルの起動にも使用できます。exeをカーネルに登録するには:

次のコマンドを使用して、rootになり、カーネルのbinfmtモジュールをオンにします。

sudo apt-get install binfmt-support
modprobe binfmt_misc

また、modprobeコマンドを/etc/rc.localブートスクリプトに追加して、ブート時に実行されるようにすることもできます。

以下の行を/etc/fstabファイルに追加します。

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

次に、システムでブート時に次のコマンドを実行します。

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

.exeファイルもファイルシステムで実行可能としてマークしてください。

chmod +x myprogram.exe

これはカーネルを変更するものではなく、システムの起動時にロードされるモジュールのみを変更することに注意してください。つまり、これらの変更を失うことを心配せずにカーネルをアップグレードできます。同様に、このセクションにリストされている呼び出し方法に影響を与えることなく、Monoランタイムをアップグレードできます。


Linuxでの最小の回避策であるbinfmt_miscオプションの+1
マリオ

1
FATAL: Module binfmt not found12.04で
リヤド

10

起動スクリプトを作成します。

プレーンテキストエディターを開き、これを追加します。

#!/bin/bash
mono foo.exe &

設定によっては、foo.exeのフルパスを使用する必要がある場合があります。

たとえば、ファイルをとして保存しますfoo.sh

実行可能にする:

sudo chmod a+x foo.sh

これで、をダブルクリックしてfoo.exeを起動できるはずfoo.shです。



1

これは古い質問ですが、グーグルで見つけたので、考えさせられました。これは大きなハックですが、ダウンロードできます

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

あなたの家に以下を.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; }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.