0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现Windows应用在Linux系统上的无缝运行

深度操作系统 来源:深度操作系统 2024-12-30 09:51 次阅读

统信 Windows 应用兼容引擎 V3.0 的推出,让用户可以在 deepin 系统上直接双击.exe文件运行 Windows 应用程序。

6345ac3a-c2a3-11ef-9310-92fbcf53809c.png

近期,我们收到了大家诸多的反馈信息。基于这些反馈,我们对使用兼容引擎运行 Windows 应用时常见的各类问题进行了梳理,同时也整理出了在问题出现的情况下,怎样借助相关工具以及日志来展开有效排查的方法。

1

绿色软件和安装程序的区别

安装程序的文件名一般会带有 Setup 或者 Installer, 双击之后的界面是这样的:

会有设置安装位置的选项;

点击“下一步”之后会展示进度条,展示安装目录;

以及最重要的,在 Windows 桌面和开始菜单上创建快捷方式。

635b5238-c2a3-11ef-9310-92fbcf53809c.png

兼容引擎在运行的 exe 退出之后会自动去找它创建的快捷方式,然后添加到应用列表中。 绿色软件通常是一个压缩包,解压之后能看到主程序文件和一堆资源文件:

637adefa-c2a3-11ef-9310-92fbcf53809c.png

双击这种 exe 就可以直接运行,没有安装和创建快捷方式的过程。

2

双击exe安装后,为什么有些应用没有添加到应用列表

兼容引擎是在应用退出之后才会将运行的 exe 添加到应用列表中。

2.1

如果运行的 exe 是安装程序

用户自己停止安装、或者运行的安装程序没有创建快捷方式;

安装程序安装完成后可能会自己启动应用,但应用起不来;

或者应用起来了,用户点击“关闭”的时候,进程没有完全退出。 上述情形下,兼容引擎列表里可能不会有应用快捷方式。

2.2

如果运行绿色软件

-运行的应用没有完全退出,可以检查应用是否最小化到在托盘内 对于应用无法退出的情况,打开任务管理器,搜索 exe 的进程,然后选中,在右键菜单里面点击“强制退出”:

6398983c-c2a3-11ef-9310-92fbcf53809c.png

3

如何运行 .Net 应用

兼容引擎会自己去检测运行的 exe 是否是 .Net 应用,如果检测到了会提示安装修复:

63abfde6-c2a3-11ef-9310-92fbcf53809c.png

此时点击“修复”会安装推荐的 .Net 版本。 如果在双击运行的时候没有自动修复而是直接跳转到运行失败的界面,可以点击“我要调试”,在弹出的配置界面里安装 .Net Framework 框架。

63d6f3b6-c2a3-11ef-9310-92fbcf53809c.png

在配置界面中,点击“组件安装”,在右侧的搜索界面输入“dotnet”,安装需要的 .Net 版本:

63f77c30-c2a3-11ef-9310-92fbcf53809c.png

也可以选择安装开源的 .Net Framework 实现 Mono:

6419268c-c2a3-11ef-9310-92fbcf53809c.png

对于需要安装 .Net Framework 的程序,聪明一点的应用会弹一个弹窗,这时候根据上面的步骤安装对应的 .Net Framework 框架:

64359a60-c2a3-11ef-9310-92fbcf53809c.png

笨一点的程序就不会给弹窗,而是直接退出了,这时候就可以去看运行日志,判断是不是安装 .Net 就可以运行。

64489ff2-c2a3-11ef-9310-92fbcf53809c.gif

点击应用右侧的“…”按钮,打开“高级调试工具”。

647516b8-c2a3-11ef-9310-92fbcf53809c.png

在应用图标的上方右键,在弹出的右键菜单中选择“在终端中运行”:

649fb03a-c2a3-11ef-9310-92fbcf53809c.png

如果我们能在终端上看到:

err:mscoree:CLRRuntimeInfo_GetRuntimeHost Wine Mono is not installed这样子的日志,就说明这个应用需要安装 .Net 才能正常运行:

64c9de5a-c2a3-11ef-9310-92fbcf53809c.png

4

安装完成为什么没有打包

应用打包的入口已经转移到了主页:

64d17e80-c2a3-11ef-9310-92fbcf53809c.png

5

绿色软件打包注意事项

在你开始打包时,如果要打包的应用是一个绿色软件,会弹出这样子的提示:

64fd7576-c2a3-11ef-9310-92fbcf53809c.png

至于什么时候该选“打包应用本身”,什么情况选“打包文件夹”,取决于运行的应用本身。 如果运行的绿色软件是一个非常简单的应用,同级目录下没有任何文件就能够跑起来,比如这样:

6519d068-c2a3-11ef-9310-92fbcf53809c.png

那么在打包的时候可以直接选择“打包应用本身”,此时 deb 包里就仅包含这个 exe 文件。 但大多数情况下,大多数绿色软件除了运行的 exe 以外,还会自带运行的 dll、资源文件、各种配置文件,比如这样:

65493b78-c2a3-11ef-9310-92fbcf53809c.png

那么打包的时候就需要选择“打包文件夹”,然后选择整个绿色软件解压后的路径。兼容引擎只是默认打开 exe 所在的目录,如果 exe 所在的层级目录很深,你需要选择更上层的文件夹才能保证将绿色软件完全打包。

6

如何删除应用重新安装

对于安装程序,大多数应用只会创建一个快捷方式,因此只需要点击“卸载”就能完全移除应用。

656cb9ae-c2a3-11ef-9310-92fbcf53809c.png

绿色软件也是如此,只需要将点击卸载就行。 如果一个应用创建了多个快捷方式,那么在高级调试工具里能看到多个应用图标(比如 WPS Office):

6588a358-c2a3-11ef-9310-92fbcf53809c.png

此时只有将列表对应的 exe 都点击“卸载”后,才算是完全删除了应用。之后就可以重新允许安装程序了:

659bdf18-c2a3-11ef-9310-92fbcf53809c.png

7

应用首次安装成功可以运行,但是退出后再次运行,运行不起来

可以进入应用的高级调试页面,右击应用列表的图标,点击“在终端中运行”:

65bd6642-c2a3-11ef-9310-92fbcf53809c.png

此时就可以进入用于调试的终端了:

65df4424-c2a3-11ef-9310-92fbcf53809c.png

如果应用无法启动,然后在终端里能看到这样的错误

import_dll Library MSVBVM60.DLL (which is needed by L"xxx.exe") not found002c: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

66003508-c2a3-11ef-9310-92fbcf53809c.png

这是因为应用缺失了 dll,而这些 dll 在当前版本的 wine 还没有实现。这时候可以在“安装组件”里搜索 dll 的名字,看是否能够通过组件安装 dll:

66246158-c2a3-11ef-9310-92fbcf53809c.png

应用可能缺多个 dll,在补完一个 dll 之后再次运行,又报一样的错误,只不过 dll 的名字不一样。一些小的应用可以在“组件安装”补完 dll 之后运行:

66365d2c-c2a3-11ef-9310-92fbcf53809c.png

如果无法在组件列表中安装缺失的 dll,那就只能自己从网上下载 dll 后,在高级调试界面的“调试工具”里打开容器 C 盘,将 dll 手动复制到 windows/system32 (或 windows/syswow64)下。

8

提示应用正在运行

因为通过双击运行的应用还没有退出。可以查看关闭窗口后,应用是否缩小到了托盘里。如果出现应用崩溃而无法正常退出的情况,只能手动将崩溃的进程杀掉。打开“任务管理器”,搜索 exe,右击找到的进程,在弹出的菜单里选择“强制结束进程”。

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 的时候都会单独创建一个隔离的环境(容器)。如果需要在已经创建的容器中运行安装程序,可以在高级配置中选择“调试工具”、单击“应用卸载器”:

665568e8-c2a3-11ef-9310-92fbcf53809c.png

在打开的应用卸载器选择“安装”:

667c562e-c2a3-11ef-9310-92fbcf53809c.png

然后选择要运行的安装程序,如果不知道如何选择路径,可以先在浏览下拉框里选择“/”(系统根目录),然后一层一层向下选择文件夹:

66b49692-c2a3-11ef-9310-92fbcf53809c.png

安装程序安装完成后,重新打开高级配置,可以在应用列表的“+”号按钮里添加安装的 EXE:

66c8bc76-c2a3-11ef-9310-92fbcf53809c.png

11

高级调试工具详细说明

这里主要说明运行应用时的常见现象和对应配置。

11.1

WineD3D 渲染方式

主要影响使用 3D 加速渲染的应用,wine 提供了三种渲染方式:

gdi:禁用 3D 加速;

opengl :默认情况下 wine 将使用 OpenGL 实现 Direct3D 渲染 API

vulkan 使用 Vulkan 实现 Direct3D 渲染 API,但实现并不完全。

如果应用启动黑屏:

66f9bc90-c2a3-11ef-9310-92fbcf53809c.gif

可以尝试将渲染方式设置成 gdi:

671fa7ac-c2a3-11ef-9310-92fbcf53809c.png

然后重新启动:

673f6394-c2a3-11ef-9310-92fbcf53809c.gif

11.2

显示 DPI

主要影响应用的文字显示大小。在高分屏上如果应用的显示字体过小,可以拉高 DPI 的值:

6791576c-c2a3-11ef-9310-92fbcf53809c.png

默认 DPI(96)的显示效果:

67b7258c-c2a3-11ef-9310-92fbcf53809c.png

把 DPI 设置成 140 的显示效果:

67d0544e-c2a3-11ef-9310-92fbcf53809c.png

11.3

Dxvk、VkD3D

DXVK 是 Direct 11 的 Vulkan 实现,而 VkD3D 是 Direct 12 的 Vulkan 实现。在设置安装好 Vulkan 驱动后,就可以通过设置这两个选项来运行游戏了。

680da9ac-c2a3-11ef-9310-92fbcf53809c.png

以 deepin 23 为例, A 卡用户需要安装 mesa-vulkan-drivers 。打开终端,然后输入下面的命令:

sudoaptinstallmesa-vulkan-drivers 对于 N 卡用户,需要安装 nvdia-vulkan-icd :sudoaptinstallnvidia-vulkan-icd 然后安装 vulkan-tools ,运行 vkcube ,能弹出 vkcube 的 demo,说明 Vulkan 显卡驱动设置完成了:sudoaptinstallvulkan-tools vkcube

682c155e-c2a3-11ef-9310-92fbcf53809c.png

可以看下使用 dxvk 前后的帧率对比。不使用 dxvk 的游戏处于不可玩的状态(0帧、渲染一帧需要6秒):

68540f00-c2a3-11ef-9310-92fbcf53809c.png

切换成 dxvk 之后:

687983a2-c2a3-11ef-9310-92fbcf53809c.png

dxvk 对显卡驱动是有要求的( https://github.com/doitsujin/dxvk/wiki/Driver-support、https://github.com/doitsujin/dxvk/wiki/Driver-support),2.0 之后的 dxvk 的要求(需要 Vulkan 1.3 的驱动):

688b5302-c2a3-11ef-9310-92fbcf53809c.png

dxvk 1.10.3 及以下版本的显卡要求(需要 Vulkan 1.1 的驱动):

689d75aa-c2a3-11ef-9310-92fbcf53809c.png

Nvidia 用户中查询系统 Vulkan 系统版本:apt search nvidia-vulkan-icd

68af4b68-c2a3-11ef-9310-92fbcf53809c.png

AMD/Intel 显卡用户查询系统 Vulkan 系统版本:apt search mesa-vulkan-drivers:

68d156a4-c2a3-11ef-9310-92fbcf53809c.png

11.4

Windows 版本和 wine 版本

应用在不同 Windows 版本下的会出现不同的行为。有的应用在高版本的 Windows 上,使用兼容引擎无法启动,此时可以将 Windows 版本设置成 Windows 7 或者更低版本来解决。

68d9549e-c2a3-11ef-9310-92fbcf53809c.png

因为有的应用会使用高版本 Windows 才有的 API,而 wine 本身又恰巧没有实现,此时使用高版本的 Windows 运行就会失败,只能将 Windows 版本切换到 Windows 7 以下才能运行。 比如运行图吧工具箱的安装程序提示运行失败:

68fed14c-c2a3-11ef-9310-92fbcf53809c.png

在运行失败的界面点击“查看日志”后可以看到这样子的日志:

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,应该可以避免应用走到刚才坏的路径:

691bdf30-c2a3-11ef-9310-92fbcf53809c.png

修改后安装程序可以运行了:

693bc570-c2a3-11ef-9310-92fbcf53809c.png

如果应用使用 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 来运行。

695a6610-c2a3-11ef-9310-92fbcf53809c.png

比方说应用内输入框光标偏移的问题:

697acbbc-c2a3-11ef-9310-92fbcf53809c.gif

就可通过使用 Windows 原生的 riched20.dll 解决 。原生的 riched20.dll 可以直接从网上下载,或者从其它 Windows 的 C 盘复制出来。打开应用的高级调试工具,点击“调试工具”,点击下方的“打开C盘”:

699a36d2-c2a3-11ef-9310-92fbcf53809c.png

将原生的 riched20.dll 复制到容器 C 盘下方的 windows/system32 目录下:

69c86a5c-c2a3-11ef-9310-92fbcf53809c.gif

然后将 riched20 设置成“原生优于内建”:

69f21a46-c2a3-11ef-9310-92fbcf53809c.gif

此时再次启动应用:

6a1f2b58-c2a3-11ef-9310-92fbcf53809c.gif

兼容引擎维护了一些常见的安装 Windows 运行库的配置脚本(组件),并自动将相关的 dll 设置成“原生优于内建”。比如光标上面的例子,可以直接在“组件安装”里搜索 riched20 然后安装:

6a46dc3e-c2a3-11ef-9310-92fbcf53809c.png

支持的加载方式有:

原生(Windows):仅加载原生 dll ,如果这个 dll 加载失败,应用将无法启动;

内建(Windows):仅加载内建的 dll;

原生优于内建:优先加载原生 dll 文件,原生 dll 加载失败时,再去加载内建 dll;

内建优于原生:优先加载内建 dll,内建 dll 加载失败时,再去加载原生 dll;

禁用:禁用 dll或应用程序。

11.6

字体替换

字体替换其实是对应用的一种“欺骗”,当应用加载字体 A 时,可以通过 wine 让应用去加载其他字体。比如应用希望加载宋体、黑体、微软雅黑等字体,但这些字体没有在系统上安装,此时就可以通过字体替换欺骗应用去加载其他字体。 应用找不到宋体时:

6a58e5c8-c2a3-11ef-9310-92fbcf53809c.png

在高级调试工具将宋体替换成系统自带的衬线字体:

6a6cbc56-c2a3-11ef-9310-92fbcf53809c.png

替换之后再打开应用:

6a83160e-c2a3-11ef-9310-92fbcf53809c.png

11.7

调试工具

用来启动 wine 自带的小工具:

打开C盘,将通过文件管理器打开容器 C 盘所在的文件夹;

注册表编辑器, 打开 wine 自带的注册表编辑器(regedit.exe);

任务管理器,打开 wine 自带的任务管理器(taskmgr.exe);

应用卸载器, 打开 wine 自带的应用卸载器(uninstall.exe);

wine配置,打开 wine 自带的容器配置工具(winecfg.exe);

退出所有应用,杀掉所有正在运行的 exe。

6a990f86-c2a3-11ef-9310-92fbcf53809c.png

如果应用运行的时候,系统的标题栏盖住了界面,而无法正常使用,比如这样:

6aae2eca-c2a3-11ef-9310-92fbcf53809c.png

此时就可以打开 “wine 配置”,禁用掉窗口装饰(取消勾选“允许窗口管理器装饰窗口”):

6acc58dc-c2a3-11ef-9310-92fbcf53809c.png

在 wine 设置点击“确定”后,再次打开应用:

6af4f800-c2a3-11ef-9310-92fbcf53809c.png

在 wine 设置勾选虚拟桌面,可以将应用显示在单独的窗口中,如果某个全屏应用无法使用,这个设置可以将应用放到窗口里:

6b114e60-c2a3-11ef-9310-92fbcf53809c.png

启用虚拟桌面后:

6b2a7ade-c2a3-11ef-9310-92fbcf53809c.png

以上就是使用兼容引擎运行 Windows 应用时常见的各类问题以及在问题出现的情况下,怎样借助相关工具以及日志来展开有效排查的方法内容,记得收藏哟。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11310

    浏览量

    209663
  • WINDOWS
    +关注

    关注

    4

    文章

    3548

    浏览量

    88783
  • 应用程序
    +关注

    关注

    37

    文章

    3275

    浏览量

    57732

原文标题:如何简单实现Windows应用在Linux系统上的无缝运行?

文章出处:【微信号:linux_deepin,微信公众号:深度操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在windowsemulate不同操作系统

    一、虚拟化威廉希尔官方网站 概述 虚拟化威廉希尔官方网站 允许在单个物理机器创建多个虚拟机,每个虚拟机都可以运行不同的操作系统。这使得我们可以在Windows系统
    的头像 发表于 12-05 15:50 206次阅读

    请问ISO7760能应用在USB3.0数据隔离吗?

    请问ISO7760能应用在USB3.0数据隔离吗? USB3.0的最大传输带宽高达5.0Gbps而ISO7760手册显示是100Mbps数据速率两者的bps单位一样,疑惑的是传输带宽和传输速率! 请问有那位朋友将ISO77
    发表于 12-04 08:01

    Docker运行环境安装

    、发布、测试和部署,可以帮助开发人员将最新版本代码应用到生产环境中。 Docker可以安装在多个平台中,包括Mac、WindowsLinux。不过,生产环境还是推荐在Linux
    的头像 发表于 10-29 11:28 227次阅读

    差动放大器通常是应用在什么场合?

    请问下差动放大器通常是应用在什么场合?
    发表于 09-19 06:35

    美格智能5G智能模组SRM930成功运行Windows 11系统

    在科技日新月异的今天,美格智能研发团队再次突破威廉希尔官方网站 壁垒,成功在旗舰级5G智能模组SRM930实现Windows 11系统的流畅运行。这一
    的头像 发表于 08-14 10:02 607次阅读

    使用xtr111应用在产品设计中,运行一段时间过后设备不工作怎么解决?

    在使用xtr111应用在产品设计中,起初设备运行稳定,运行一段时间过后设备不工作,其它器件完好,XTR111烧毁,无法工作。如下是原理图帮忙看看有哪些地方需要改善的。谢谢。 现在也在检查坏片的每个管脚对地阻抗与正常芯片对比,
    发表于 08-14 07:14

    求助,请问TLV2464cpwr通用运放有应用在audio的典型电路吗?

    TLV2464cpwr通用运放有应用在audio的典型电路吗?
    发表于 08-08 08:20

    “5G+Windows”推动全场景数字化升级:美格智能5G智能模组SRM930成功运行Windows 11系统

    美格智能研发团队在5G智能模组SRM930上成功运行Windows 11系统实现Android、Linux
    的头像 发表于 08-05 17:35 404次阅读
    “5G+<b class='flag-5'>Windows</b>”推动全场景数字化升级:美格智能5G智能模组SRM930成功<b class='flag-5'>运行</b><b class='flag-5'>Windows</b> 11<b class='flag-5'>系统</b>

    gprsdemo在windows server系统无法运行的解决办法

    gprsdemo在windows server系统无法运行,请按照如下步骤设置以解决该问题。1. 按下图进入依次下面界面 2. 点击“添加”后,会弹出文件浏览对话框,找到DTU配
    发表于 07-25 06:03

    英国公司实现英伟达CUDA软件在AMD GPU无缝运行

    7月18日最新资讯,英国创新科技企业Spectral Compute震撼发布了其革命性GPGPU编程工具包——“SCALE”,该工具包实现了英伟达CUDA软件在AMD GPU无缝迁移与运行
    的头像 发表于 07-18 14:40 666次阅读

    研华工控机用什么系统WindowsLinux操作系统的较量

    工控机用什么系统WindowsLinux操作系统的较量。工控机(工业控制计算机)作为工业自动化和监控系统的核心组件,其稳定性、可靠性和性
    的头像 发表于 06-14 14:38 712次阅读
    研华工控机用什么<b class='flag-5'>系统</b>?<b class='flag-5'>Windows</b>与<b class='flag-5'>Linux</b>操作<b class='flag-5'>系统</b>的较量

    运行Windows11的系统安装KitProg编程器驱动程序时遇到的疑问求解

    我在运行 Windows 11 的系统安装 KitProg 编程器驱动程序时遇到困难。 每次尝试安装时,Windows 都无法为设备找到合
    发表于 05-21 06:35

    Linux系统无法识别Cypress3014的原因?

    目前,我的开发板使用赛普拉斯3014芯片并使用UVC输出。 但是,程序运行后,可以在 Windows 系统识别设备,但在 Linux
    发表于 02-23 06:11

    linux服务器和windows服务器

    应用和企业环境中使用,那么Win dows服务器可能更适合你的需求。 综上所述,Linux服务器和Windows服务器各有优劣,选择适合自己需求的服务器操作系统是确保服务器系统正常
    发表于 02-22 15:46

    linuxwindows的区别 linux系统一般用来干嘛

    LinuxWindows是两种不同的操作系统,有着不同的设计理念和用途。本文将对LinuxWindows的区别进行详细分析,并介绍
    的头像 发表于 02-05 14:06 986次阅读