1 要求
本文基于下面的要求,简要说明在Linux中运行Windows程序的方法。
1、Windows程序:wintest
wintest是32位Windows应用程序,需要安装后才能使用。
安装后,可以使用命令行执行文件转换:wintest.exe e:\in.txt e:\out.txt
wintest程序的功能是读入in.txt,输出out.txt。
2、在Redhat中运行wintest程序
要求在Redhat 6.3(64位)中运行wintest程序,即Redhat提供in.txt,wintest完成转换,输出out.txt。
2 使用Windows虚拟机运行程序
1、安装虚拟机:Redhat中安装VirtualBox,VirtualBox中安装Win7虚拟机
2、Win7虚拟机安装虚拟机增强功能(设备 - 安装增强功能),然后安装wintest程序。
3、使用VirtualBox设置Win7虚拟机的共享目录,它是Redhat中的一个目录。
4、启动Win7虚拟机后,在浏览器中就可以看到共享目录。
5、Redhat中将in.txt放入共享目录,在Win7执行wintest程序,它从共享目录中读取in.txt,将out.txt放入共享目录,这样,Redhat就获得了out.txt。
3 使用Wine运行Windows程序
3.1 使用源代码安装Wine
参考:https://wiki.archlinux.org/index.php/Wine_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
1、设置yum源
参考:http://www.linuxidc.com/Linux/2013-07/87383.htm
主要步骤:
1)下载repo文件:wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
2)修改这个repo文件,注意改成6,不是6.3,见目标网页的readme说明。
3)把这个repo文件拷贝到 /etc/yum.repos.d
4)执行 yum clean all
5)执行 yum makecache
2、安装32位开发库
参考:http://blog.sina.com.cn/s/blog_4ba5b45e0102e5bj.html
yum install alsa-lib-devel.i686 libsndfile-devel.i686
readline-devel.i686 glibc-devel.i686 libstdc++-devel.i686
pulseaudio-libs-devel.i686 cmake portaudio-devel.i686
openal-soft-devel.i686 audiofile-devel.i686 freeglut-devel.i686
lcms-devel.i686 libieee1284-devel.i686 openldap-devel.i686
unixODBC-devel.i686 sane-backends-devel.i686 fontforge
libgphoto2-devel.i686 isdn4k-utils-devel.i686 mesa-libGL-devel.i686
mesa-libGLU-devel.i686 libXxf86dga-devel.i686 libXxf86vm-devel.i686
giflib-devel.i686 cups-devel.i686 gsm-devel.i686 libv4l-devel.i686
fontpackages-devel openal-soft-devel.i686 libX11-devel.i686
docbook-utils-pdf libtextcat tex-cm-lgc freetype-devel.i686
libXrender-devel.i686 libxml2-devel.i686 libjpeg-turbo-devel.i686
3、安装Wine
1)下载Wine源码包:https://www.winehq.org/download/
2)解压源码包
例如:tar jxvf wine-1.8.4.tar.bz2
2)安装
./configure
make
make install
4、安装wintest程序
执行wineconsole,在窗口中安装wintest程序。
说明:启动wineconsole,会提示安装:Wine Mono 、Wine Gecko,可以不安装。
说明:可以使用wine命令进行Windows程序的静默安装,请自行网上搜索msiexec和静默安装,主要选项是 /i /qb /qn 。
5、执行wintest程序
参考: 如何运行Wine
1)在wineconsole窗口中执行
例如: wintest z:\in.txt z:\out.txt
2)在Redhat命令行中执行
例如: wine z:\\wintest z:\\in.txt z:\\out.txt
3.2 使用yum安装Wine
参考:http://www.tecmint.com/install-wine-in-rhel-centos-and-fedora/
1、设置yum源
与3.1相同
2、安装Wine
执行下列命令:
yum –disablerepo=epel -y update ca-certificates
yum install epel-release
yum install wine
3、其余步骤
与3.1相同
3.3 使用rpm安装Wine
把yum install wine安装过程中下载的所有rpm文件拷贝到一个目录中,
执行安装命令 rpm --nodeps -ivh *
会提示有冲突,把产生冲突的rpm文件删掉,再尝试安装,最终能够安装成功。
3.4 自动执行Windows GUI程序
如果要想在Redhat系统启动后,自动执行Windows GUI程序,需要增加如下工作。
1、安装Redhat系统时需要安装桌面
以KDE桌面为例,在安装Redhat Server版时需要安装:KDE桌面、X窗口系统、字体、桌面平台、继承 X Windows系统的兼容性、输入法、等
2、使能系统启动自动登录
修改 /etc/kde/kdm/kdmrc
AutoLoginEnable=true
AutoLoginUser=root
3、设置环境变量
export DISPLAY=:0
4、执行Windows GUI程序
在C/C++程序中可以调用:
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
#include<stdlib.h>
int system(const char * string);