Wine Mono 环境安装并运行.Net WPF
文章目录介绍测试环境安装环境安装 WineHQ5.0排查问题add-apt-repository 找不到命令安装 add-apt-repository 包python-software-properties 包不存在时add-apt-repository 出现异常异常 NoDistroTemplateException安装WineTricks(Wine安装助手)安装WineTricks利用 win
介绍
因项目需要,希望公司的产品能够在国产Linux操作系统中运行。在安装环境时遇到的一些坑跟心得,记下来分享给大家。
测试环境
Linux 系统 : 统信UOS
.Net运行时: .Net Framework 4.5.2
安装环境
安装 WineHQ5.0
# 参考官方教程: https://wiki.winehq.org/Ubuntu_zhcn # 安装WineHQ
# 开启32位架构支持
sudo dpkg --add-architecture i386
# 下载仓库密钥
wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
# 添加WineHQ 仓库源
sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/debian/ stretch main'
# 更新apt-get缓存
sudo apt update
# 安装WineHQ
sudo apt install --install-recommends winehq-stable
排查问题
add-apt-repository 找不到命令
遇到这个问题尝试安装add-apt-repository
相关包, 但出现一些另外的问题, 最终直接利用文件的方式添加apt仓库源, 解决方法如下:
# 切换到root
su -
# 添加apt仓库源
echo "deb https://dl.winehq.org/wine-builds/debian/ stretch main" > /etc/apt/sources.list.d/winehq.list
# 更新apt仓库索引
sudo apt update
安装 add-apt-repository 包
## 安装Package
## python-software-properties、software-properties-common
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
sudo apt-get update
python-software-properties 包不存在时
请用以下方法处理:
这时需要修改/etc/lsb-release文件,注释掉原内容,然后追加如下修改,仅供参考:
#DISTRIB_ID=Deepin
#DISTRIB_RELEASE="15.11"
#DISTRIB_DESCRIPTION="Deepin 15.11"
#DISTRIB_CODENAME=stable
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
这样就可以使用add-apt-repository命令了,不会报错误。
add-apt-repository 出现异常异常 NoDistroTemplateException
# aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Deepin/n/a
# 修改文件 (未测试)
sudo vim /usr/share/python-apt/templates/Deepin.info
# 将 Suite=XXXX 改为 Suite=Stable
安装WineTricks(Wine安装助手)
安装WineTricks
默认情况下,apt
包管理器的Winetricks
不是最新的,如果需要安装最新的请按以下方式:
# 参考链接 https://wiki.winehq.org/Winetricks
# 下载winetricks
cd "${HOME}/Downloads"
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
# 安装 winetricks 用到的 package
sudo apt install cabextract unzip p7zip wget
# 安装 winetricks GUI 操作界面 (可选)
sudo apt install zenity
# 将 winetricks 拷贝的 系统
sudo cp winetricks /usr/bin/winetricks
利用 winetricks 安装mono、gecko
在Linux中,mono主要用来跑.Net Framework的程序, gecko 用来支持程序中嵌入HTML (这里也一起安装了, 防止出现其他问题)
# 运行winetricks
winetricks
# 正常情况下如果你没有安装mono、gecko会提示你安装, 如下图
点击安装之后可以通过以下命令查看.
# wine 下的程序管理
wine uninstaller
手动安装 mono、gecko
下载mono、gecko
# 下载 wine-mono 下载网址 https://dl.winehq.org/wine/wine-mono/
curl https://dl.winehq.org/wine/wine-mono/6.3.0/wine-mono-6.3.0-x86.msi --output wine-mono-6.3.0-x86.msi
# 下载 wine-gecko 下载网址 http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/
curl http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86.msi --output wine-gecko-2.47.2-x86.msi
# 对于 64位wine 32位跟64位的 gecko 都必须安装
curl http://dl.winehq.org/wine/wine-gecko/2.47.1/wine-gecko-2.47.1-x86_64.msi --output wine-gecko-2.47.1-x86_64.msi
如果提示 Wine cannot find the ncurses library (libncurses.so.5).
则安装ncurses
sudo apt install libncurses5 libncurses5:i386 # 安装32位与64位curses
手动安装mono、gecko
# 安装mono
sudo wine start wine-mono-6.3.0-x86.msi
# 安装gecko
sudo wine start wine-gecko-2.47.2-x86.msi
sudo wine start wine-gecko-2.47.1-x86_64.msi
点击安装之后可以通过以下命令查看.
# wine 下的程序管理
wine uninstaller
安装Wine字体
安装必要的字体
# 安装 必须的字体
winetricks corefonts
支持显示中文字体
这里参考网上的大佬们写的文章, 拷贝 simsun.ttc
(宋体)跟msyh.ttc
(微软雅黑) 到 wine 环境目录下再注册就可以了,但是我试了很多次都还不行。
最终通过如下方法成功显示出中文:
# 支持富文本框控件显示 (顺序安装, 防止出错)
# 1. 先安装 richtx32
winetricks richtx32
# 2. 再安装 riched30
winetricks riched30 # 这里可能需要FQ才能下载, 已再 附录中 上传了, 可直接下载
# 3. 再安装 riched20
winetricks riched20 # 这里可能需要FQ才能下载, 已再 附录中 上传了, 可直接下载
# 安装字体
winetricks cjkfonts
以下为成功打开WPF程序。
附录
wine 的一些命令
# 查看 wine 配置
winecfg
# 引导 根据指定架构初始化 默认Prefix
wineboot
# 查看 wine 安装的库
wine uninstaller
# wine 打开注册表
wine regedit
# 注册字体
cp your_font_file.ttc ~/.wine/drive_c/window/Fonts/
regedit ~/.wine/drive_c/window/Fonts
# 安装msi安装包
wine start package.msi # 或 wine msiexec /i package.msi
# 其他命令参考 https://wiki.winehq.org/List_of_Commands
wine-mono 安装对照表
wine与mono对照表用来对照装mono, 譬如说wine的版本为5.0, 则mono版本应该选择安装 4.9.4 版本 或 最新6.3.0
注意: 如果框架中使用WPF则mono版本必须>= 5.0.0
wine-gecko 安装对照表
wine与gecko对照表用来对照装gecko, 譬如说wine的版本为5.0, 则Gecko 版本应该选择安装 2.47.1 版本 或 2.47.2
wine 32位64位架构切换
# 启用wine 多架构
dpkg --print-foreign-architectures | grep -q i386 && sudo dpkg --add-architecture i386
# 移动源64位配置到.wine64 然后切换成32位 并重新引导
mv ~/.wine ~/.wine64 && WINEARCH=win32 wineboot
参考: How do I create a 32-bit WINE prefix? (如果创建 32位wine前缀与架构)
Wine 中 PREFIX 与 ARCH 关系
如下为个人理解.
Prefix 相当于一个环境, 环境中包含一个Winodw镜像,可通过Prefix区别32位跟64位环境。
ARCH 表示此环境是32位或者64位。
根据前缀(Prefix)基于架构(Arch)构建环境,并且前缀下的环境是相互隔离的。
通过执行前缀(Prefix)与架构(ARCH) 则可以实现指定环境下运行程序。
当我们需要某个在32位环境下运行程序或者要在32位环境下安装DLLs等…
# 在32位环境下运行程序
WINEPREFIX=~/.wine32 WINEARCH=win32 your_32bit_executable.exe
# 在64位环境下运行程序
WINEPREFIX=~/.wine WINEARCH=win64 your_64bit_executable.exe
ARCH 表示此环境是32位或者64位
通过执行前缀(Prefix)与架构(ARCH) 则可以实现指定环境下运行程序,并且前缀(Prefix)之间的程序都是相互隔离的。
当我们需要某个在32位环境下运行程序或者要在32位环境下安装DLLs等…
# 在32位环境下运行程序
WINEPREFIX=~/.wine32 WINEARCH=win32 your_32bit_executable.exe
# 在64位环境下运行程序
WINEPREFIX=~/.wine WINEARCH=win64 your_64bit_executable.exe
字体问题
ubuntu下通过wine安装windows软件(以微信和Adobe Acrobat Pro为例)
参考链接
A developers guide to running WPF apps on Linux with .NET Core and Wine (在Wine中运行.NetCoreWPF程序)
更多推荐










所有评论(0)