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