运行Mono程序而不输入'mono foo.exe'


13

在Ubuntu上运行.net程序时,我必须输入“ mono foo.exe”而不是foo.exe或双击图标。有什么办法可以只运行foo.exe吗?

Answers:


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运行时,而不会影响本节中列出的任何调用方法。


+1为binfmt_misc选项,这是Linux上最小的解决方法
mario

1
FATAL: Module binfmt not found在12.04
利雅得

10

创建启动脚本。

打开纯文本编辑器,添加以下内容:

#!/bin/bash
mono foo.exe &

根据您的设置,您可能需要使用foo.exe的完整路径。

将文件另存为foo.sh

使它可执行:

sudo chmod a+x foo.sh

现在,您应该能够通过双击启动foo.exe。 foo.sh



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; }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.