百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

haoteby 2025-06-15 16:22 17 浏览

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

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

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

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

  • 会有设置安装位置的选项;
  • 点击“下一步”之后会展示进度条,展示安装目录;
  • 以及最重要的,在 Windows 桌面和开始菜单上创建快捷方式。

兼容引擎在运行的 exe 退出之后会自动去找它创建的快捷方式,然后添加到应用列表中。

绿色软件通常是一个压缩包,解压之后能看到主程序文件和一堆资源文件:

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

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

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

2.1如果运行的 exe 是安装程序

  • 用户自己停止安装、或者运行的安装程序没有创建快捷方式;
  • 安装程序安装完成后可能会自己启动应用,但应用起不来;
  • 或者应用起来了,用户点击“关闭”的时候,进程没有完全退出。
    上述情形下,兼容引擎列表里可能不会有应用快捷方式。

2.2如果运行绿色软件

-运行的应用没有完全退出,可以检查应用是否最小化到在托盘内

对于应用无法退出的情况,打开任务管理器,搜索 exe 的进程,然后选中,在右键菜单里面点击“强制退出”:

三、如何运行 .Net 应用

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

此时点击“修复”会安装推荐的 .Net 版本。

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

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

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

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


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

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

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

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

err:mscoree:CLRRuntimeInfo_GetRuntimeHost Wine Mono is not installed

这样子的日志,就说明这个应用需要安装 .Net 才能正常运行:

四、安装完成为什么没有打包

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

五、绿色软件打包注意事项

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

至于什么时候该选“打包应用本身”,什么情况选“打包文件夹”,取决于运行的应用本身。


如果运行的绿色软件是一个非常简单的应用,同级目录下没有任何文件就能够跑起来,比如这样:

那么在打包的时候可以直接选择“打包应用本身”,此时 deb 包里就仅包含这个 exe 文件。


但大多数情况下,大多数绿色软件除了运行的 exe 以外,还会自带运行的 dll、资源文件、各种配置文件,比如这样:

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


六、如何删除应用重新安装

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


绿色软件也是如此,只需要将点击卸载就行。


如果一个应用创建了多个快捷方式,那么在高级调试工具里能看到多个应用图标(比如 WPS Office):



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

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

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


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


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

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)下。


八、提示应用正在运行

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

九、如何收集日志

兼容引擎的日志路径:

~/.local/share/deepin-wine-bottles/bottles.log~/.cache/deepin/deepin-wine-builder/deepin-wine-builder.log


运行应用的 wine 日志:

~/.local/share/deepin-wine-bottles/bottles/[应用容器目录]/logs


十、如何在已有的应用列表中运行升级、安装程序

现在的兼容引擎在每次双击、添加 exe 的时候都会单独创建一个隔离的环境(容器)。如果需要在已经创建的容器中运行安装程序,可以在高级配置中选择“调试工具”、单击“应用卸载器”:


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

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

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

十一、高级调试工具详细说明


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

11.1WineD3D 渲染方式

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

  • gdi:禁用 3D 加速;
  • opengl :默认情况下 wine 将使用 OpenGL 实现 Direct3D 渲染 API;
  • vulkan 使用 Vulkan 实现 Direct3D 渲染 API,但实现并不完全。


如果应用启动黑屏:

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

然后重新启动:


11.2显示 DPI

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

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

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

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 之后:

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 或者更低版本来解决。

因为有的应用会使用高版本 Windows 才有的 API,而 wine 本身又恰巧没有实现,此时使用高版本的 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 应用时常见的各类问题以及在问题出现的情况下,怎样借助相关工具以及日志来展开有效排查的方法内容,记得收藏哟。

相关推荐

谷歌开源大模型评测框架正式发布,AI模型评测难题迎刃而解

近日科技巨头谷歌正式推出其开源大模型评测框架LMEval,这一创新工具为全球AI开发者和企业提供了标准化的模型评估解决方案。LMEval的发布不仅标志着AI模型评测迈入透明化时代,更通过多项核心技术...

Android 开发中文引导-动画和图形概述

安卓系统提供了各种强大的API,用来将动画应用于界面元素和自定义2D和3D图形的绘制当中。下面的小节大概的描述了可用的API和系统功能并帮助你决定那个方案最适合你的需要。动画安卓框架提供了两种动画系统...

Qt5 C++入门教程-第12章 绘图(QPainter)

QPainter类在Qt5中进行绘图时起着重要作用。绘图操作是通过QPainter类在响应paintEvent方法时完成的。线条在第一个示例中,我们在窗口的客户区绘制了一些线条。line...

文创测评︱《如意琳琅图籍》:本土原创解谜书的胜利?

设想这样一个场景,你打开一本书,就化身为乾隆三十六年紫禁城中的画画人周本,有一天你在故纸堆中找到一本神秘的《如意琳琅图籍》,踏上寻宝旅程,历经各种离奇复杂的故事……这是故宫与奥秘之家联手打造的创意解谜...

gif动图制作攻略!快快收藏(求gif制作的动图)

有事没事斗图玩是当下人们乐此不疲的事情,手里的gif动图也渐渐成为了人们抬杠互怼的一大资本。好有趣,好炫酷,gif是怎么做出来的?我也想做。什么?你不会?没关系,我来教你!首先介绍一下制作gif动图需...

eduis未能初始化界面 无法启动 问题解决办法

1.如果edius安装后启动后出现failedtoinitializeskin中文提示无法初始化界面的错误。这说明你的电脑安装了双显卡,而edius所使用的是图形显卡。可以选择edius图标右键...

写真一周:水岛美结水着解禁、长滨祢瑠婚纱写真等

...

Flash Player模拟器更新:Rufffle(flash模拟器安卓下载高版本)

Ruffle是一个适用于WindowsPC的FlashPlayer模拟器,用Rust编写。Ruffle作为一个独立的应用程序在所有现代操作系统上原生运行,并通过使用WebAssembly在所有现代...

支持终身免费4G流量,星星充电7kW星际智能交流充电桩拆解

前言近期星星充电推出了一款星际智能交流充电桩,在正面设有灯条,可根据灯条颜色和显示直观了解充电状态,并设有屏幕显示充电状态和ui表情。充电桩支持220V/7kW充电功率,适配主流新能源车型。并支持终身...

乐动随心之fancy pop(乐动随心壶多少钱一个)

跳动飞扬的音符像是连通人与人之间心电感应的通关密码,融化陌生,拉近彼此。此次我们邀请到宅男女神江语晨,化身音乐精灵。在歌手、演员身份间游刃自如的她,为我们生动诠释了三种不同的音乐时尚风格,娴静可爱,灵...

Asus Zenflash 手机也能玩引闪,从此相机是路人

在讲解Zenflash之前,不得不提索爱的K750c,这个机器采用了氙气闪光灯,让手机的拍摄上了档次,可玩性更高,不过,说实话,当时手机的摄像头像素低,成像一般,没有掀起太大的波澜,可现在,手机的Cm...

Axure有哪些鲜为人知的使用技巧?(axure的使用教程)

阿拓带你飞:不管是想入门产品经理还是已经是PM的人对AXURE都很关注,它是制作产品原型的重要工具,但是有多少人了解AXURE的使用技巧?本文是来自“知乎问答”整理的回答,一起来看看那些不常用的使用技...

挑战黑夜 华硕ZenFlash氙气闪光灯评测

【机锋配件】说到摄影,相信许多朋友都非常喜欢,不管是外出游玩拍拍风景,还是和朋友之间聚会,都会掏出手机拍两张,在餐前拍照晒朋友圈更是成为了许多用户的日常爱好,就算不是专业的摄影爱好者,大家也都有一颗热...

WPS 演示倒计时 3 步设置!从数字动画到进度条全场景教程

做PPT时想添加倒计时却找不到入口?WPS演示自带的"动画+计时"功能就能轻松实现——无论是课堂互动的30秒答题倒计时、商务汇报的5分钟限时讲解,还是活动暖场的动...

flash动画an制作MG动画元素如何调节透明度,小白...

如何在flash动画软件里面调节mg动画元素的透明?因为flash动画软件现在已经升级为flash动画软件,所以直接用新版flash动画软件开工,基本功能都差不多,只是flash增加很多智能化、人性...