无需输入“mono foo.exe”即可运行 Mono 程序

无需输入“mono foo.exe”即可运行 Mono 程序

在 Ubuntu 上运行 .net 程序时,我必须输入“mono foo.exe”,而不是直接输入 foo.exe 或双击图标。有没有办法直接运行 foo.exe?

答案1

这个链接有帮助吗?运行 Mono

来自 Mono 项目中关于使用 binfmt 的内容:

将 .exe 注册为非本地二进制文件(仅限 Linux)

因为这是 Linux 特有的功能,我们不建议开发人员部署此解决方案,因为它会限制其脚本的可移植性。

此外,这种机制并没有按照预期发挥作用应用程序部署指南

您还可以进行系统范围的更改,并使用 binfmt 将 exe 文件注册为非本机二进制文件。然后,当尝试启动 exe 文件时,内核将运行 mono 解释器来处理该命令。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 运行时而不会影响本节列出的任何调用方法。

答案2

创建启动脚本。

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

#!/bin/bash
mono foo.exe &

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

例如将文件另存为foo.sh

使其可执行:

sudo chmod a+x foo.sh

现在您应该可以通过双击来启动 foo.exe foo.sh

答案3

您可以在 Nautilus 上关联要执行的文件扩展名“.exe”/usr/bin/mono

答案4

我知道这是一个老问题,但我通过谷歌找到了它,这让我开始思考。这是一个重大的黑客攻击,但你可以下载

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; }

相关内容