เมื่อรันโปรแกรม. net บน Ubuntu ฉันต้องพิมพ์ "mono foo.exe" แทนที่จะเป็นเพียง foo.exe หรือดับเบิลคลิกที่ไอคอน มีวิธีใดในการรัน foo.exe หรือไม่
เมื่อรันโปรแกรม. net บน Ubuntu ฉันต้องพิมพ์ "mono foo.exe" แทนที่จะเป็นเพียง foo.exe หรือดับเบิลคลิกที่ไอคอน มีวิธีใดในการรัน foo.exe หรือไม่
คำตอบ:
ลิงก์นี้มีประโยชน์หรือไม่ เล่นโมโน
จากโครงการโมโนเกี่ยวกับการใช้ 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
โปรดทราบว่านี่จะไม่เปลี่ยนเคอร์เนลของคุณเพียงแค่โมดูลที่โหลดเมื่อคุณบูตระบบ กล่าวอีกนัยหนึ่งคุณยังคงสามารถอัพเกรดเคอร์เนลได้โดยไม่ต้องกังวลกับการสูญเสียการเปลี่ยนแปลงเหล่านี้ คุณสามารถอัพเกรดรันไทม์โมโนของคุณได้โดยไม่กระทบต่อวิธีการเรียกใช้ที่แสดงในส่วนนี้
FATAL: Module binfmt not found
ใน 12.04
สร้างสคริปต์เริ่มต้น
เปิดตัวแก้ไขข้อความธรรมดาเพิ่มสิ่งนี้:
#!/bin/bash
mono foo.exe &
คุณอาจต้องใช้เส้นทางแบบเต็มสำหรับ foo.exe ทั้งนี้ขึ้นอยู่กับการตั้งค่าของคุณ
foo.sh
บันทึกไฟล์ตัวอย่างเป็น
ทำให้ปฏิบัติการ:
sudo chmod a+x foo.sh
ตอนนี้คุณควรจะสามารถที่จะเริ่มต้น foo.exe foo.sh
โดยการดับเบิลคลิก
คุณสามารถเชื่อมโยงไฟล์นามสกุล '.exe' บน Nautilus เพื่อเรียกใช้งานได้ /usr/bin/mono
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันพบผ่าน 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; }