Chạy chương trình đơn âm mà không cần nhập 'mono foo.exe'


13

Khi chạy chương trình .net trên Ubuntu, tôi phải gõ "mono foo.exe" thay vì chỉ foo.exe hoặc nhấp đúp vào biểu tượng. Có cách nào để chạy foo.exe không?

Câu trả lời:


17

Liên kết này có giúp được không? Chạy đơn

Từ Dự án Mono về việc sử dụng binfmt:

Đăng ký .exe dưới dạng nhị phân không phải nguồn gốc (chỉ dành cho Linux)

Vì đây là một tính năng dành riêng cho Linux, chúng tôi không khuyên các nhà phát triển triển khai giải pháp này, vì nó sẽ hạn chế tính di động của các tập lệnh của họ.

Ngoài ra, cơ chế này không hoạt động như dự định của Nguyên tắc triển khai ứng dụng .

Bạn cũng có thể thực hiện thay đổi toàn hệ thống và sử dụng binfmt để đăng ký các tệp exe dưới dạng nhị phân không gốc. Sau đó, khi cố gắng khởi chạy một tệp exe, kernel sẽ chạy trình thông dịch đơn âm để xử lý lệnh. Binfmt cũng có thể được sử dụng để khởi chạy các tệp thực thi Windows bằng cách sử dụng các tệp WINE hoặc Java. Class bằng JVM. Để đăng ký exe với kernel:

Trở thành root và bật mô-đun binfmt trong kernel của bạn bằng lệnh này:

sudo apt-get install binfmt-support
modprobe binfmt_misc

Ngoài ra, bạn có thể muốn thêm modprobelệnh vào /etc/rc.localtập lệnh khởi động của mình , để nó sẽ được thực thi khi khởi động.

Thêm dòng dưới đây vào /etc/fstabtập tin của bạn :

binfmt_misc /proc/sys/fs/binfmt_misc binfmt_misc none

Sau đó, yêu cầu hệ thống của bạn chạy lệnh sau khi khởi động:

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

Đảm bảo đánh dấu các tệp .exe của bạn là có thể thực thi được trong hệ thống tệp:

chmod +x myprogram.exe

Lưu ý rằng điều này không thay đổi kernel của bạn, chỉ là các mô-đun mà nó tải khi bạn khởi động hệ thống. Nói cách khác, bạn vẫn có thể nâng cấp kernel của mình mà không lo mất các thay đổi này. Tương tự, bạn có thể nâng cấp thời gian chạy Mono của mình mà không ảnh hưởng đến bất kỳ phương thức gọi nào được liệt kê trong phần này.


+1 cho tùy chọn binfmt_misc, đây là cách giải quyết nhỏ nhất trên Linux
mario

1
nhận được FATAL: Module binfmt not foundvào ngày 12.04
Rịa

10

Tạo một kịch bản khởi động.

Mở trình soạn thảo văn bản đơn giản, thêm phần này:

#!/bin/bash
mono foo.exe &

Tùy thuộc vào thiết lập của bạn, bạn có thể cần sử dụng đường dẫn đầy đủ cho foo.exe.

Lưu tập tin ví dụ như foo.sh.

Làm cho nó thực thi:

sudo chmod a+x foo.sh

Bây giờ bạn có thể bắt đầu foo.exe bằng cách nhấp đúp foo.sh.


2

Bạn có thể liên kết phần mở rộng tệp '.exe' trên Nautilus để được thực thi với /usr/bin/mono


1

Tôi biết đây là một câu hỏi cũ nhưng tôi đã tìm thấy nó thông qua google và nó khiến tôi suy nghĩ. Đây là một hack lớn nhưng bạn có thể tải xuống

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

đến nhà của bạn và thêm phần sau vào .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; }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.