Wine Mono 环境安装并运行.Net WPF

介绍

因项目需要,希望公司的产品能够在国产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-Mono

安装Wine-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 

查看安装Mono与Gecko

安装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程序。

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

wine-mono 安装对照表

注意: 如果框架中使用WPF则mono版本必须>= 5.0.0

wine-gecko 安装对照表

wine与gecko对照表用来对照装gecko, 譬如说wine的版本为5.0, 则Gecko 版本应该选择安装 2.47.1 版本 或 2.47.2

wine-gecko 安装对照表

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

字体问题

Wine中中文显示为错误的解决方案

ubuntu下通过wine安装windows软件(以微信和Adobe Acrobat Pro为例)

解决Ubuntu下wine打开微信无法看到输入框内容

参考链接

A developers guide to running WPF apps on Linux with .NET Core and Wine (在Wine中运行.NetCoreWPF程序)

linux下路径名中含空格如何处理

dotnet 在 UOS 国产系统上安装 Mono 开发工具的方法

wine —— windows软件移植到Linux系统

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值