'Mono foo.exe' yazmadan mono bir program çalıştırma


13

Ubuntu üzerinde bir .net programı çalıştırırken sadece foo.exe yerine "mono foo.exe" yazmanız veya simgeyi çift tıklamanız gerekiyor. Sadece foo.exe'yi çalıştırmanın bir yolu var mı?

Yanıtlar:


17

Bu bağlantı yardımcı oluyor mu? Mono Koşu

Binfmt kullanımı üzerine Mono Projesinden:

.Exe dosyasını yerel olmayan ikili dosyalar olarak kaydetme (yalnızca Linux)

Bu Linux'a özgü bir özellik olduğundan, geliştiricilerin komut dosyalarının taşınabilirliğini sınırlayacağı için bu çözümü dağıtmasını önermiyoruz.

Ayrıca, bu mekanizma Uygulama Dağıtım Yönergeleri'nin amaçladığı gibi çalışmaz .

Ayrıca sistem çapında bir değişiklik yapabilir ve exe dosyalarını yerel olmayan ikili dosyalar olarak kaydetmek için binfmt kullanabilirsiniz. Ardından, bir exe dosyasını başlatmaya çalışırken, çekirdek komutu işlemek için mono yorumlayıcıyı çalıştıracaktır. Binfmt, WINE kullanarak Windows yürütülebilir dosyalarını veya JVM kullanarak Java .class dosyalarını başlatmak için de kullanılabilir. Exe'yi çekirdeğe kaydetmek için:

Kök olun ve çekirdeğinizdeki binfmt modülünü şu komutla açın:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Ayrıca, önyükleme komut dosyanıza modprobekomutu eklemek isteyebilirsiniz /etc/rc.local, böylece önyükleme sırasında yürütülür.

Aşağıdaki satırı /etc/fstabdosyanıza ekleyin :

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Ardından, sisteminizin önyüklemede aşağıdaki komutu çalıştırmasını sağlayın:

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

.Exe dosyalarınızı dosya sisteminde de yürütülebilir olarak işaretlediğinizden emin olun:

chmod +x myprogram.exe

Bunun çekirdeğinizi değiştirmediğini, yalnızca sisteminizi başlattığınızda yüklediği modülleri unutmayın. Başka bir deyişle, bu değişiklikleri kaybetme konusunda endişelenmeden çekirdeğinizi yükseltebilirsiniz. Benzer şekilde, bu bölümde listelenen çağırma yöntemlerinden herhangi birini etkilemeden Mono çalışma zamanınızı yükseltebilirsiniz.


Linux'taki en küçük geçici çözüm olan binfmt_misc seçeneği için +1
mario

1
got FATAL: Module binfmt not found12.04 de
Riad

10

Bir başlangıç ​​komut dosyası oluşturun.

Düz bir metin düzenleyici açın, şunu ekleyin:

#!/bin/bash
mono foo.exe &

Kurulumunuza bağlı olarak, foo.exe dosyasının tam yolunu kullanmanız gerekebilir.

Dosyayı örneğin olarak kaydedin foo.sh.

Yürütülebilir yap:

sudo chmod a+x foo.sh

Şimdi foo.exe dosyasını çift tıklatarak başlatabilirsiniz foo.sh.


2

Nautilus'ta yürütülecek '.exe' dosya uzantısını, /usr/bin/mono


1

Bu eski bir soru olduğunu biliyorum ama ben google üzerinden buldum ve beni düşündürdü. Bu büyük bir hack ama indirebilirsiniz

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

evinize ekleyin ve aşağıdakileri .bashrc'ye ekleyin

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; }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.