热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Linux中直接运行Windows二进制程序

在Linux中直接运行Windows二进制程序--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
  虽然大多数linux爱好者都不怎么使用Windows,但是不少人还是习惯了某些Windows下的软件,而不愿意从开源仓库中寻找替代品。

  当然,你可以用拥有Wine的GNU/Linux系统解决这个问题。但是还有令人感觉不如意的地方:每次想要启动这些程序时,你不得不输入 cd ~/.wine/drive_c/Program\ Files\My\ Windows\ App; wine My\ Windows\ App.exe

  请注意,是每次。用shell脚本也不是什么很好的主意。有没有什么办法,能在xterm下直接通过My\ Windows\ App.exe来运行这些程序?

  幸运的是,Linux内核特性binfmt_misc就够帮助你达成这个愿望。

  当你运行你的Linux发布版本的stock kernel后,便拥有这个特性。如果没有,或者说你希望使用你自定制的核心,那么请确定,无论是内置还是作为模块,你都要选择CONFIG_BINFMT_MISC (Executable file formats -> Kernel support for MISC binaries)。在后一种情况下,请确定binfmt_misc模块在启动时是自动加载的(在Debian和Debian系的系统中可以运行echo binfmt_misc >> /etc/modules) 。之后通过命令 mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc 挂载bifmt_misc,或者拷贝下面的字符到你的/etc/fstab文件中,以确保在每一次启动时它都自动挂载: none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0
  
  现在,你必须告诉binfmt_misc,通过调用/usr/bin/wine来执行win16或win32应用程序。请注意,wine的路径必须是全路径,否则不能工作: echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register

  接下来就要让这个设置永久性得起作用。如果你使用的是gentoo,将前面的这个命令复制到你的/etc/rc.d/rc.local 或 /etc/conf.d/local.start文件中。如果你使用的是基于Debian的发行版,就要复制下面的命令到/etc/init.d/wine: #!/bin/sh test -e proc/sys/fs/binfmt_misc/register || exit 0 case "$1" in start) echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register ;; stop) echo 0 > /proc/sys/fs/binfmt_misc/status ;; *) echo "Usage: $0 {start|stop}" >&2 exit 3 ;; esac 然后,通过 chmod 755 /etc/init.d/wine 让文件能够被用户执行。再通过 update-rc.d wine start 99 2 3 4 5 . stop 10 0 1 6 . 让它在启动过程中开始起作用。

  最后一步,确认你的Windows二进制程序能够被执行,当然还是通过这个命令 chmod 755 ./My\ Windows\ App.exe 接下来,你就能和运行linux程序一样来运行它了。当然,为了方便,你还可以建立一个符号连接到你的任何一个PATH路径下,例如/usr/local/bin。

  用同样的办法,binfmt_misc能够运行基于java和python编写的程序,如果想得到更多信息的话,请参考任何一个版本较新的内核文件包中的Documentation/binmft_misc.txt。

  这个技术也许在应用上还存在一些安全性问题------例如本地提权------因此,请让值得信任的用户在更新过的系统中使用。更好的办法,是让你的/proc文件系统通过nosuid属性挂载。
推荐阅读
  • 主流操作系统简介
    主流操作系统简介子墨居士操作系统理论定义为管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分࿰ ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • Linux神奇漏洞:长按回车键70秒 即可轻松拿到Root权限
    一般来说获取系统root权限是很困难的,尤其是加密系统中,但西班牙安全研究员hectormarco、ismaelripoll发现,linux系统下只需按住回车键70秒钟,就能轻 ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
  • 如何监控 Linux 服务器状态?,分享
    Linux服务器我们天天打交道,特别是Linux工程师更是如此。为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展。本文介绍的几个命令,不仅仅适用于 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 如何将CentOS8转换为CentOSStream
    CentOS Stream是一个持续交付的Linux发行版,它在RHEL之前处于领先地位。它将具有滚动发布,即不断进行更改。CentOS将成为一个上游版本,它将具有测试补丁和更新。 ... [详细]
author-avatar
静静敲代码
很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有