统信 Windows 应用兼容引擎 V3.0 的推出,让用户可以在 deepin 系统上直接双击.exe文件运行 Windows 应用程序。
1、绿色软件和安装程序的区别
-
会有设置安装位置的选项; -
点击“下一步”之后会展示进度条,展示安装目录; -
以及最重要的,在 Windows 桌面和开始菜单上创建快捷方式。
兼容引擎在运行的 exe 退出之后会自动去找它创建的快捷方式,然后添加到应用列表中。
绿色软件通常是一个压缩包,解压之后能看到主程序文件和一堆资源文件:
双击这种 exe 就可以直接运行,没有安装和创建快捷方式的过程。
2、双击exe安装后,为什么有些应用没有添加到应用列表
-
用户自己停止安装、或者运行的安装程序没有创建快捷方式; -
安装程序安装完成后可能会自己启动应用,但应用起不来; -
或者应用起来了,用户点击“关闭”的时候,进程没有完全退出。
上述情形下,兼容引擎列表里可能不会有应用快捷方式。
2.2 如果运行绿色软件
运行的应用没有完全退出,可以检查应用是否最小化到在托盘内
对于应用无法退出的情况,打开任务管理器,搜索 exe 的进程,然后选中,在右键菜单里面点击“强制退出”:
3、如何运行 .Net 应用
此时点击“修复”会安装推荐的 .Net 版本。
如果在双击运行的时候没有自动修复而是直接跳转到运行失败的界面,可以点击“我要调试”,在弹出的配置界面里安装 .Net Framework 框架。
在配置界面中,点击“组件安装”,在右侧的搜索界面输入“dotnet”,安装需要的 .Net 版本:
也可以选择安装开源的 .Net Framework 实现 Mono:
笨一点的程序就不会给弹窗,而是直接退出了,这时候就可以去看运行日志,判断是不是安装 .Net 就可以运行。
点击应用右侧的“…”按钮,打开“高级调试工具”。
在应用图标的上方右键,在弹出的右键菜单中选择“在终端中运行”:
如果我们能在终端上看到:
err:mscoree:CLRRuntimeInfo_GetRuntimeHost Wine Mono is not installed
这样子的日志,就说明这个应用需要安装 .Net 才能正常运行:
4、安装完成为什么没有打包
5、绿色软件打包注意事项
至于什么时候该选“打包应用本身”,什么情况选“打包文件夹”,取决于运行的应用本身。
如果运行的绿色软件是一个非常简单的应用,同级目录下没有任何文件就能够跑起来,比如这样:
那么打包的时候就需要选择“打包文件夹”,然后选择整个绿色软件解压后的路径。兼容引擎只是默认打开 exe 所在的目录,如果 exe 所在的层级目录很深,你需要选择更上层的文件夹才能保证将绿色软件完全打包。
6、如何删除应用重新安装
绿色软件也是如此,只需要将点击卸载就行。
如果一个应用创建了多个快捷方式,那么在高级调试工具里能看到多个应用图标(比如 WPS Office):
7、应用首次安装成功可以运行,但是退出后再次运行,运行不起来
此时就可以进入用于调试的终端了:
如果应用无法启动,然后在终端里能看到这样的错误
import_dll Library MSVBVM60.DLL (which is needed by L"xxx.exe") not found
002c:err:wineboot:process_run_key Error running cmd L"C:\\windows\\system32\\winemenubuilder.exe -a -r" (126).
wine version: 8.16
0024:err:environ:init_peb starting L"C:\\Program Files (x86)\\Kingsoft\\TypeEasy\\TypeGame\\Frog\\TypeGame.exe" in experimental wow64 mode
0024:err:module:import_dll Library MSVBVM60.DLL (which is needed by L"C:\\Program Files (x86)\\Kingsoft\\TypeEasy\\TypeGame\\Frog\\TypeGame.exe") not found
0024:err:module:loader_init Importing dlls for L"C:\\Program Files (x86)\\Kingsoft\\TypeEasy\\TypeGame\\Frog\\TypeGame.exe" failed, status c0000135
这是因为应用缺失了 dll,而这些 dll 在当前版本的 wine 还没有实现。这时候可以在“安装组件”里搜索 dll 的名字,看是否能够通过组件安装 dll:
应用可能缺多个 dll,在补完一个 dll 之后再次运行,又报一样的错误,只不过 dll 的名字不一样。一些小的应用可以在“组件安装”补完 dll 之后运行:
如果无法在组件列表中安装缺失的 dll,那就只能自己从网上下载 dll 后,在高级调试界面的“调试工具”里打开容器 C 盘,将 dll 手动复制到 windows/system32 (或 windows/syswow64)下。
8、提示应用正在运行
9、如何收集日志
~/.local/share/deepin-wine-bottles/bottles.log~/.cache/deepin/deepin-wine-builder/deepin-wine-builder.log
运行应用的 wine 日志:
~/.local/share/deepin-wine-bottles/bottles/[应用容器目录]/logs
10、如何在已有的应用列表中运行升级、安装程序
在打开的应用卸载器选择“安装”:
然后选择要运行的安装程序,如果不知道如何选择路径,可以先在浏览下拉框里选择“/”(系统根目录),然后一层一层向下选择文件夹:
安装程序安装完成后,重新打开高级配置,可以在应用列表的“+”号按钮里添加安装的 EXE:
11、高级调试工具详细说明
这里主要说明运行应用时的常见现象和对应配置。
11.1 WineD3D 渲染方式
-
gdi:禁用 3D 加速; -
opengl :默认情况下 wine 将使用 OpenGL 实现 Direct3D 渲染 API; -
vulkan 使用 Vulkan 实现 Direct3D 渲染 API,但实现并不完全。
如果应用启动黑屏:
可以尝试将渲染方式设置成 gdi:
然后重新启动:
11.2 显示 DPI
默认 DPI(96)的显示效果:
11.3 Dxvk、VkD3D
DXVK 是 Direct 11 的 Vulkan 实现,而 VkD3D 是 Direct 12 的 Vulkan 实现。在设置安装好 Vulkan 驱动后,就可以通过设置这两个选项来运行游戏了。
以 deepin 23 为例, A 卡用户需要安装 mesa-vulkan-drivers 。打开终端,然后输入下面的命令:
sudo apt install mesa-vulkan-drivers
对于 N 卡用户,需要安装 nvdia-vulkan-icd :
sudo apt install nvidia-vulkan-icd
然后安装 vulkan-tools ,运行 vkcube ,能弹出 vkcube 的 demo,说明 Vulkan 显卡驱动设置完成了:
sudo apt install vulkan-tools
vkcube
可以看下使用 dxvk 前后的帧率对比。不使用 dxvk 的游戏处于不可玩的状态(0帧、渲染一帧需要6秒):
dxvk 对显卡驱动是有要求的( https://github.com/doitsujin/dxvk/wiki/Driver-support、https://github.com/doitsujin/dxvk/wiki/Driver-support),2.0 之后的 dxvk 的要求(需要 Vulkan 1.3 的驱动):
dxvk 1.10.3 及以下版本的显卡要求(需要 Vulkan 1.1 的驱动):
Nvidia 用户中查询系统 Vulkan 系统版本:apt search nvidia-vulkan-icd
AMD/Intel 显卡用户查询系统 Vulkan 系统版本:apt search mesa-vulkan-drivers:
11.4 Windows 版本和 wine 版本
应用在不同 Windows 版本下的会出现不同的行为。有的应用在高版本的 Windows 上,使用兼容引擎无法启动,此时可以将 Windows 版本设置成 Windows 7 或者更低版本来解决。
在运行失败的界面点击“查看日志”后可以看到这样子的日志:
log
RoGetActivationFactory Failed to find library for L"Windows.UI.Xaml.Hosting.WindowsXamlManager"
百度一下 Windows.UI.Xaml.Hosting.WindowsXamlManager,就能知道这其实是一个 Windows Runtime 的 API,只能在 Windows 8 之后的系统使用,但在 wine 里还没有实现完全导致安装程序无法启动。
将 Windows 的版本设置成 Windows 7,应该可以避免应用走到刚才坏的路径:
修改后安装程序可以运行了:
如果应用使用 deepin-wine8-stable 无法打开,可以考虑将 wine 版本切换成后续的 deepin-wine-staging,使用新的 wine9 运行,高版本的 wine 实现了更多的功能。
11.5 DLL 覆盖
wine 自己实现了一套 Windows 核心的模块(dll)。我们把 wine 自己实现的 dll 称作 builtin(内建 dll),把 Windows 上现成的 dll 称作 native(原生 dll),而 wine 加载所有的 dll 文件时,都会优先载入内建的 dll。当我们需要让 wine 使用 Windows 上现成的 dll 时,就需要设置 DLL 覆盖。
wine 除了实现 Windows 核心 dll 以外(gdi32,kernel32,user32…),还实现了其他外围的 dll。(msxml、riched20、winnet…)
使用兼容引擎时,有时候会因为内建 dll 出现界面异常、崩溃的问题,这时候我们可以尝试使用 Windows 的原生 dll 来运行。
比方说应用内输入框光标偏移的问题:
就可通过使用 Windows 原生的 riched20.dll 解决 。原生的 riched20.dll 可以直接从网上下载,或者从其它 Windows 的 C 盘复制出来。打开应用的高级调试工具,点击“调试工具”,点击下方的“打开C盘”:
将原生的 riched20.dll 复制到容器 C 盘下方的 windows/system32 目录下:
然后将 riched20 设置成“原生优于内建”:
此时再次启动应用:
兼容引擎维护了一些常见的安装 Windows 运行库的配置脚本(组件),并自动将相关的 dll 设置成“原生优于内建”。比如光标上面的例子,可以直接在“组件安装”里搜索 riched20 然后安装:
支持的加载方式有:
-
原生(Windows):仅加载原生 dll ,如果这个 dll 加载失败,应用将无法启动; -
内建(Windows):仅加载内建的 dll; -
原生优于内建:优先加载原生 dll 文件,原生 dll 加载失败时,再去加载内建 dll; -
内建优于原生:优先加载内建 dll,内建 dll 加载失败时,再去加载原生 dll; -
禁用:禁用 dll或应用程序。
11.6 字体替换
字体替换其实是对应用的一种“欺骗”,当应用加载字体 A 时,可以通过 wine 让应用去加载其他字体。比如应用希望加载宋体、黑体、微软雅黑等字体,但这些字体没有在系统上安装,此时就可以通过字体替换欺骗应用去加载其他字体。
应用找不到宋体时:
在高级调试工具将宋体替换成系统自带的衬线字体:
替换之后再打开应用:
11.7 调试工具
用来启动 wine 自带的小工具:
-
打开C盘,将通过文件管理器打开容器 C 盘所在的文件夹; -
注册表编辑器, 打开 wine 自带的注册表编辑器(regedit.exe); -
任务管理器,打开 wine 自带的任务管理器(taskmgr.exe); -
应用卸载器, 打开 wine 自带的应用卸载器(uninstall.exe); -
wine配置,打开 wine 自带的容器配置工具(winecfg.exe); -
退出所有应用,杀掉所有正在运行的 exe。
如果应用运行的时候,系统的标题栏盖住了界面,而无法正常使用,比如这样:
此时就可以打开 “wine 配置”,禁用掉窗口装饰(取消勾选“允许窗口管理器装饰窗口”):
在 wine 设置点击“确定”后,再次打开应用:
在 wine 设置勾选虚拟桌面,可以将应用显示在单独的窗口中,如果某个全屏应用无法使用,这个设置可以将应用放到窗口里:
启用虚拟桌面后:
以上就是使用兼容引擎运行 Windows 应用时常见的各类问题以及在问题出现的情况下,怎样借助相关工具以及日志来展开有效排查的方法内容。
相关阅读:
内容来源:deepin(深度)社区
转载请注明出处