เรียกใช้โปรแกรมโมโนโดยไม่ต้องพิมพ์ 'mono foo.exe'


13

เมื่อรันโปรแกรม. net บน Ubuntu ฉันต้องพิมพ์ "mono foo.exe" แทนที่จะเป็นเพียง foo.exe หรือดับเบิลคลิกที่ไอคอน มีวิธีใดในการรัน foo.exe หรือไม่

คำตอบ:


17

ลิงก์นี้มีประโยชน์หรือไม่ เล่นโมโน

จากโครงการโมโนเกี่ยวกับการใช้ binfmt:

การลงทะเบียน. exe เป็นไบนารีที่ไม่ใช่เจ้าของภาษา (Linux เท่านั้น)

เนื่องจากนี่เป็นคุณลักษณะเฉพาะของ Linux เราไม่แนะนำให้นักพัฒนาปรับใช้โซลูชันนี้เนื่องจากจะ จำกัด การพกพาของสคริปต์ได้

นอกจากนี้กลไกนี้ไม่ทำงานตามที่ตั้งใจไว้โดยการประยุกต์ใช้แนวทางการปรับใช้

นอกจากนี้คุณยังสามารถทำการเปลี่ยนแปลงทั่วทั้งระบบและใช้ binfmt เพื่อลงทะเบียนไฟล์ exe เป็นไบนารีที่ไม่ใช่เจ้าของภาษา จากนั้นเมื่อพยายามเปิดไฟล์ exe เคอร์เนลจะเรียกใช้ล่ามขาวดำเพื่อจัดการคำสั่ง Binfmt ยังสามารถใช้เพื่อเรียกใช้งานโปรแกรมปฏิบัติการ Windows โดยใช้ WINE หรือไฟล์ Java .class โดยใช้ JVM ในการลงทะเบียน exe ด้วยเคอร์เนล:

เป็นรูทและเปิดโมดูล 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

โปรดทราบว่านี่จะไม่เปลี่ยนเคอร์เนลของคุณเพียงแค่โมดูลที่โหลดเมื่อคุณบูตระบบ กล่าวอีกนัยหนึ่งคุณยังคงสามารถอัพเกรดเคอร์เนลได้โดยไม่ต้องกังวลกับการสูญเสียการเปลี่ยนแปลงเหล่านี้ คุณสามารถอัพเกรดรันไทม์โมโนของคุณได้โดยไม่กระทบต่อวิธีการเรียกใช้ที่แสดงในส่วนนี้


+1 สำหรับตัวเลือก binfmt_misc ซึ่งเป็นวิธีแก้ปัญหาที่เล็กที่สุดในลินุกซ์
มาริโอ

1
ได้FATAL: Module binfmt not foundใน 12.04
RiaD

10

สร้างสคริปต์เริ่มต้น

เปิดตัวแก้ไขข้อความธรรมดาเพิ่มสิ่งนี้:

#!/bin/bash
mono foo.exe &

คุณอาจต้องใช้เส้นทางแบบเต็มสำหรับ foo.exe ทั้งนี้ขึ้นอยู่กับการตั้งค่าของคุณ

foo.shบันทึกไฟล์ตัวอย่างเป็น

ทำให้ปฏิบัติการ:

sudo chmod a+x foo.sh

ตอนนี้คุณควรจะสามารถที่จะเริ่มต้น foo.exe foo.shโดยการดับเบิลคลิก


2

คุณสามารถเชื่อมโยงไฟล์นามสกุล '.exe' บน Nautilus เพื่อเรียกใช้งานได้ /usr/bin/mono


1

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันพบผ่าน google และทำให้ฉันคิด นี่เป็นแฮ็คหลัก แต่คุณสามารถดาวน์โหลดได้

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.