統(tǒng)信 Windows 應(yīng)用兼容引擎 V3.0 的推出,讓用戶可以在 deepin 系統(tǒng)上直接雙擊.exe文件運(yùn)行 Windows 應(yīng)用程序。
近期,我們收到了大家諸多的反饋信息。基于這些反饋,我們對(duì)使用兼容引擎運(yùn)行 Windows 應(yīng)用時(shí)常見(jiàn)的各類問(wèn)題進(jìn)行了梳理,同時(shí)也整理出了在問(wèn)題出現(xiàn)的情況下,怎樣借助相關(guān)工具以及日志來(lái)展開有效排查的方法。
1
綠色軟件和安裝程序的區(qū)別
安裝程序的文件名一般會(huì)帶有 Setup 或者 Installer, 雙擊之后的界面是這樣的:
會(huì)有設(shè)置安裝位置的選項(xiàng);
點(diǎn)擊“下一步”之后會(huì)展示進(jìn)度條,展示安裝目錄;
以及最重要的,在 Windows 桌面和開始菜單上創(chuàng)建快捷方式。
兼容引擎在運(yùn)行的 exe 退出之后會(huì)自動(dòng)去找它創(chuàng)建的快捷方式,然后添加到應(yīng)用列表中。 綠色軟件通常是一個(gè)壓縮包,解壓之后能看到主程序文件和一堆資源文件:
雙擊這種 exe 就可以直接運(yùn)行,沒(méi)有安裝和創(chuàng)建快捷方式的過(guò)程。
2
雙擊exe安裝后,為什么有些應(yīng)用沒(méi)有添加到應(yīng)用列表
兼容引擎是在應(yīng)用退出之后才會(huì)將運(yùn)行的 exe 添加到應(yīng)用列表中。
2.1
如果運(yùn)行的 exe 是安裝程序
用戶自己停止安裝、或者運(yùn)行的安裝程序沒(méi)有創(chuàng)建快捷方式;
安裝程序安裝完成后可能會(huì)自己?jiǎn)?dòng)應(yīng)用,但應(yīng)用起不來(lái);
或者應(yīng)用起來(lái)了,用戶點(diǎn)擊“關(guān)閉”的時(shí)候,進(jìn)程沒(méi)有完全退出。 上述情形下,兼容引擎列表里可能不會(huì)有應(yīng)用快捷方式。
2.2
如果運(yùn)行綠色軟件
-運(yùn)行的應(yīng)用沒(méi)有完全退出,可以檢查應(yīng)用是否最小化到在托盤內(nèi) 對(duì)于應(yīng)用無(wú)法退出的情況,打開任務(wù)管理器,搜索 exe 的進(jìn)程,然后選中,在右鍵菜單里面點(diǎn)擊“強(qiáng)制退出”:
3
如何運(yùn)行 .Net 應(yīng)用
兼容引擎會(huì)自己去檢測(cè)運(yùn)行的 exe 是否是 .Net 應(yīng)用,如果檢測(cè)到了會(huì)提示安裝修復(fù):
此時(shí)點(diǎn)擊“修復(fù)”會(huì)安裝推薦的 .Net 版本。 如果在雙擊運(yùn)行的時(shí)候沒(méi)有自動(dòng)修復(fù)而是直接跳轉(zhuǎn)到運(yùn)行失敗的界面,可以點(diǎn)擊“我要調(diào)試”,在彈出的配置界面里安裝 .Net Framework 框架。
在配置界面中,點(diǎn)擊“組件安裝”,在右側(cè)的搜索界面輸入“dotnet”,安裝需要的 .Net 版本:
也可以選擇安裝開源的 .Net Framework 實(shí)現(xiàn) Mono:
對(duì)于需要安裝 .Net Framework 的程序,聰明一點(diǎn)的應(yīng)用會(huì)彈一個(gè)彈窗,這時(shí)候根據(jù)上面的步驟安裝對(duì)應(yīng)的 .Net Framework 框架:
笨一點(diǎn)的程序就不會(huì)給彈窗,而是直接退出了,這時(shí)候就可以去看運(yùn)行日志,判斷是不是安裝 .Net 就可以運(yùn)行。
點(diǎn)擊應(yīng)用右側(cè)的“…”按鈕,打開“高級(jí)調(diào)試工具”。
在應(yīng)用圖標(biāo)的上方右鍵,在彈出的右鍵菜單中選擇“在終端中運(yùn)行”:
如果我們能在終端上看到:
err:mscoree:CLRRuntimeInfo_GetRuntimeHost Wine Mono is not installed這樣子的日志,就說(shuō)明這個(gè)應(yīng)用需要安裝 .Net 才能正常運(yùn)行:
4
安裝完成為什么沒(méi)有打包
應(yīng)用打包的入口已經(jīng)轉(zhuǎn)移到了主頁(yè):
5
綠色軟件打包注意事項(xiàng)
在你開始打包時(shí),如果要打包的應(yīng)用是一個(gè)綠色軟件,會(huì)彈出這樣子的提示:
至于什么時(shí)候該選“打包應(yīng)用本身”,什么情況選“打包文件夾”,取決于運(yùn)行的應(yīng)用本身。 如果運(yùn)行的綠色軟件是一個(gè)非常簡(jiǎn)單的應(yīng)用,同級(jí)目錄下沒(méi)有任何文件就能夠跑起來(lái),比如這樣:
那么在打包的時(shí)候可以直接選擇“打包應(yīng)用本身”,此時(shí) deb 包里就僅包含這個(gè) exe 文件。 但大多數(shù)情況下,大多數(shù)綠色軟件除了運(yùn)行的 exe 以外,還會(huì)自帶運(yùn)行的 dll、資源文件、各種配置文件,比如這樣:
那么打包的時(shí)候就需要選擇“打包文件夾”,然后選擇整個(gè)綠色軟件解壓后的路徑。兼容引擎只是默認(rèn)打開 exe 所在的目錄,如果 exe 所在的層級(jí)目錄很深,你需要選擇更上層的文件夾才能保證將綠色軟件完全打包。
6
如何刪除應(yīng)用重新安裝
對(duì)于安裝程序,大多數(shù)應(yīng)用只會(huì)創(chuàng)建一個(gè)快捷方式,因此只需要點(diǎn)擊“卸載”就能完全移除應(yīng)用。
綠色軟件也是如此,只需要將點(diǎn)擊卸載就行。 如果一個(gè)應(yīng)用創(chuàng)建了多個(gè)快捷方式,那么在高級(jí)調(diào)試工具里能看到多個(gè)應(yīng)用圖標(biāo)(比如 WPS Office):
此時(shí)只有將列表對(duì)應(yīng)的 exe 都點(diǎn)擊“卸載”后,才算是完全刪除了應(yīng)用。之后就可以重新允許安裝程序了:
7
應(yīng)用首次安裝成功可以運(yùn)行,但是退出后再次運(yùn)行,運(yùn)行不起來(lái)
可以進(jìn)入應(yīng)用的高級(jí)調(diào)試頁(yè)面,右擊應(yīng)用列表的圖標(biāo),點(diǎn)擊“在終端中運(yùn)行”:
此時(shí)就可以進(jìn)入用于調(diào)試的終端了:
如果應(yīng)用無(wú)法啟動(dòng),然后在終端里能看到這樣的錯(cuò)誤
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
這是因?yàn)閼?yīng)用缺失了 dll,而這些 dll 在當(dāng)前版本的 wine 還沒(méi)有實(shí)現(xiàn)。這時(shí)候可以在“安裝組件”里搜索 dll 的名字,看是否能夠通過(guò)組件安裝 dll:
應(yīng)用可能缺多個(gè) dll,在補(bǔ)完一個(gè) dll 之后再次運(yùn)行,又報(bào)一樣的錯(cuò)誤,只不過(guò) dll 的名字不一樣。一些小的應(yīng)用可以在“組件安裝”補(bǔ)完 dll 之后運(yùn)行:
如果無(wú)法在組件列表中安裝缺失的 dll,那就只能自己從網(wǎng)上下載 dll 后,在高級(jí)調(diào)試界面的“調(diào)試工具”里打開容器 C 盤,將 dll 手動(dòng)復(fù)制到 windows/system32 (或 windows/syswow64)下。
8
提示應(yīng)用正在運(yùn)行
因?yàn)橥ㄟ^(guò)雙擊運(yùn)行的應(yīng)用還沒(méi)有退出。可以查看關(guān)閉窗口后,應(yīng)用是否縮小到了托盤里。如果出現(xiàn)應(yīng)用崩潰而無(wú)法正常退出的情況,只能手動(dòng)將崩潰的進(jìn)程殺掉。打開“任務(wù)管理器”,搜索 exe,右擊找到的進(jìn)程,在彈出的菜單里選擇“強(qiáng)制結(jié)束進(jìn)程”。
9
如何收集日志
兼容引擎的日志路徑:
~/.local/share/deepin-wine-bottles/bottles.log~/.cache/deepin/deepin-wine-builder/deepin-wine-builder.log 運(yùn)行應(yīng)用的 wine 日志:~/.local/share/deepin-wine-bottles/bottles/[應(yīng)用容器目錄](méi)/logs
10
如何在已有的應(yīng)用列表中運(yùn)行升級(jí)、安裝程序
現(xiàn)在的兼容引擎在每次雙擊、添加 exe 的時(shí)候都會(huì)單獨(dú)創(chuàng)建一個(gè)隔離的環(huán)境(容器)。如果需要在已經(jīng)創(chuàng)建的容器中運(yùn)行安裝程序,可以在高級(jí)配置中選擇“調(diào)試工具”、單擊“應(yīng)用卸載器”:
在打開的應(yīng)用卸載器選擇“安裝”:
然后選擇要運(yùn)行的安裝程序,如果不知道如何選擇路徑,可以先在瀏覽下拉框里選擇“/”(系統(tǒng)根目錄),然后一層一層向下選擇文件夾:
安裝程序安裝完成后,重新打開高級(jí)配置,可以在應(yīng)用列表的“+”號(hào)按鈕里添加安裝的 EXE:
11
高級(jí)調(diào)試工具詳細(xì)說(shuō)明
這里主要說(shuō)明運(yùn)行應(yīng)用時(shí)的常見(jiàn)現(xiàn)象和對(duì)應(yīng)配置。
11.1
WineD3D 渲染方式
主要影響使用 3D 加速渲染的應(yīng)用,wine 提供了三種渲染方式:
gdi:禁用 3D 加速;
opengl :默認(rèn)情況下 wine 將使用 OpenGL 實(shí)現(xiàn) Direct3D 渲染 API;
vulkan 使用 Vulkan 實(shí)現(xiàn) Direct3D 渲染 API,但實(shí)現(xiàn)并不完全。
如果應(yīng)用啟動(dòng)黑屏:
可以嘗試將渲染方式設(shè)置成 gdi:
然后重新啟動(dòng):
11.2
顯示 DPI
主要影響應(yīng)用的文字顯示大小。在高分屏上如果應(yīng)用的顯示字體過(guò)小,可以拉高 DPI 的值:
默認(rèn) DPI(96)的顯示效果:
把 DPI 設(shè)置成 140 的顯示效果:
11.3
Dxvk、VkD3D
DXVK 是 Direct 11 的 Vulkan 實(shí)現(xiàn),而 VkD3D 是 Direct 12 的 Vulkan 實(shí)現(xiàn)。在設(shè)置安裝好 Vulkan 驅(qū)動(dòng)后,就可以通過(guò)設(shè)置這兩個(gè)選項(xiàng)來(lái)運(yùn)行游戲了。
以 deepin 23 為例, A 卡用戶需要安裝 mesa-vulkan-drivers 。打開終端,然后輸入下面的命令:
sudoaptinstallmesa-vulkan-drivers 對(duì)于 N 卡用戶,需要安裝 nvdia-vulkan-icd :sudoaptinstallnvidia-vulkan-icd 然后安裝 vulkan-tools ,運(yùn)行 vkcube ,能彈出 vkcube 的 demo,說(shuō)明 Vulkan 顯卡驅(qū)動(dòng)設(shè)置完成了:sudoaptinstallvulkan-tools vkcube
可以看下使用 dxvk 前后的幀率對(duì)比。不使用 dxvk 的游戲處于不可玩的狀態(tài)(0幀、渲染一幀需要6秒):
切換成 dxvk 之后:
dxvk 對(duì)顯卡驅(qū)動(dòng)是有要求的( https://github.com/doitsujin/dxvk/wiki/Driver-support、https://github.com/doitsujin/dxvk/wiki/Driver-support),2.0 之后的 dxvk 的要求(需要 Vulkan 1.3 的驅(qū)動(dòng)):
dxvk 1.10.3 及以下版本的顯卡要求(需要 Vulkan 1.1 的驅(qū)動(dòng)):
Nvidia 用戶中查詢系統(tǒng) Vulkan 系統(tǒng)版本:apt search nvidia-vulkan-icd
AMD/Intel 顯卡用戶查詢系統(tǒng) Vulkan 系統(tǒng)版本:apt search mesa-vulkan-drivers:
11.4
Windows 版本和 wine 版本
應(yīng)用在不同 Windows 版本下的會(huì)出現(xiàn)不同的行為。有的應(yīng)用在高版本的 Windows 上,使用兼容引擎無(wú)法啟動(dòng),此時(shí)可以將 Windows 版本設(shè)置成 Windows 7 或者更低版本來(lái)解決。
因?yàn)橛械膽?yīng)用會(huì)使用高版本 Windows 才有的 API,而 wine 本身又恰巧沒(méi)有實(shí)現(xiàn),此時(shí)使用高版本的 Windows 運(yùn)行就會(huì)失敗,只能將 Windows 版本切換到 Windows 7 以下才能運(yùn)行。 比如運(yùn)行圖吧工具箱的安裝程序提示運(yùn)行失敗:
在運(yùn)行失敗的界面點(diǎn)擊“查看日志”后可以看到這樣子的日志:
log RoGetActivationFactory Failed to find library for L"Windows.UI.Xaml.Hosting.WindowsXamlManager" 百度一下 Windows.UI.Xaml.Hosting.WindowsXamlManager,就能知道這其實(shí)是一個(gè) Windows Runtime 的 API,只能在 Windows 8 之后的系統(tǒng)使用,但在 wine 里還沒(méi)有實(shí)現(xiàn)完全導(dǎo)致安裝程序無(wú)法啟動(dòng)。 將 Windows 的版本設(shè)置成 Windows 7,應(yīng)該可以避免應(yīng)用走到剛才壞的路徑:
修改后安裝程序可以運(yùn)行了:
如果應(yīng)用使用 deepin-wine8-stable 無(wú)法打開,可以考慮將 wine 版本切換成后續(xù)的 deepin-wine-staging,使用新的 wine9 運(yùn)行,高版本的 wine 實(shí)現(xiàn)了更多的功能。
11.5
DLL 覆蓋
wine 自己實(shí)現(xiàn)了一套 Windows 核心的模塊(dll)。我們把 wine 自己實(shí)現(xiàn)的 dll 稱作 builtin(內(nèi)建 dll),把 Windows 上現(xiàn)成的 dll 稱作 native(原生 dll),而 wine 加載所有的 dll 文件時(shí),都會(huì)優(yōu)先載入內(nèi)建的 dll。當(dāng)我們需要讓 wine 使用 Windows 上現(xiàn)成的 dll 時(shí),就需要設(shè)置 DLL 覆蓋。 wine 除了實(shí)現(xiàn) Windows 核心 dll 以外(gdi32,kernel32,user32…),還實(shí)現(xiàn)了其他外圍的 dll。(msxml、riched20、winnet…) 使用兼容引擎時(shí),有時(shí)候會(huì)因?yàn)閮?nèi)建 dll 出現(xiàn)界面異常、崩潰的問(wèn)題,這時(shí)候我們可以嘗試使用 Windows 的原生 dll 來(lái)運(yùn)行。
比方說(shuō)應(yīng)用內(nèi)輸入框光標(biāo)偏移的問(wèn)題:
就可通過(guò)使用 Windows 原生的 riched20.dll 解決 。原生的 riched20.dll 可以直接從網(wǎng)上下載,或者從其它 Windows 的 C 盤復(fù)制出來(lái)。打開應(yīng)用的高級(jí)調(diào)試工具,點(diǎn)擊“調(diào)試工具”,點(diǎn)擊下方的“打開C盤”:
將原生的 riched20.dll 復(fù)制到容器 C 盤下方的 windows/system32 目錄下:
然后將 riched20 設(shè)置成“原生優(yōu)于內(nèi)建”:
此時(shí)再次啟動(dòng)應(yīng)用:
兼容引擎維護(hù)了一些常見(jiàn)的安裝 Windows 運(yùn)行庫(kù)的配置腳本(組件),并自動(dòng)將相關(guān)的 dll 設(shè)置成“原生優(yōu)于內(nèi)建”。比如光標(biāo)上面的例子,可以直接在“組件安裝”里搜索 riched20 然后安裝:
支持的加載方式有:
原生(Windows):僅加載原生 dll ,如果這個(gè) dll 加載失敗,應(yīng)用將無(wú)法啟動(dòng);
內(nèi)建(Windows):僅加載內(nèi)建的 dll;
原生優(yōu)于內(nèi)建:優(yōu)先加載原生 dll 文件,原生 dll 加載失敗時(shí),再去加載內(nèi)建 dll;
內(nèi)建優(yōu)于原生:優(yōu)先加載內(nèi)建 dll,內(nèi)建 dll 加載失敗時(shí),再去加載原生 dll;
禁用:禁用 dll或應(yīng)用程序。
11.6
字體替換
字體替換其實(shí)是對(duì)應(yīng)用的一種“欺騙”,當(dāng)應(yīng)用加載字體 A 時(shí),可以通過(guò) wine 讓應(yīng)用去加載其他字體。比如應(yīng)用希望加載宋體、黑體、微軟雅黑等字體,但這些字體沒(méi)有在系統(tǒng)上安裝,此時(shí)就可以通過(guò)字體替換欺騙應(yīng)用去加載其他字體。 應(yīng)用找不到宋體時(shí):
在高級(jí)調(diào)試工具將宋體替換成系統(tǒng)自帶的襯線字體:
替換之后再打開應(yīng)用:
11.7
調(diào)試工具
用來(lái)啟動(dòng) wine 自帶的小工具:
打開C盤,將通過(guò)文件管理器打開容器 C 盤所在的文件夾;
注冊(cè)表編輯器, 打開 wine 自帶的注冊(cè)表編輯器(regedit.exe);
任務(wù)管理器,打開 wine 自帶的任務(wù)管理器(taskmgr.exe);
應(yīng)用卸載器, 打開 wine 自帶的應(yīng)用卸載器(uninstall.exe);
wine配置,打開 wine 自帶的容器配置工具(winecfg.exe);
退出所有應(yīng)用,殺掉所有正在運(yùn)行的 exe。
如果應(yīng)用運(yùn)行的時(shí)候,系統(tǒng)的標(biāo)題欄蓋住了界面,而無(wú)法正常使用,比如這樣:
此時(shí)就可以打開 “wine 配置”,禁用掉窗口裝飾(取消勾選“允許窗口管理器裝飾窗口”):
在 wine 設(shè)置點(diǎn)擊“確定”后,再次打開應(yīng)用:
在 wine 設(shè)置勾選虛擬桌面,可以將應(yīng)用顯示在單獨(dú)的窗口中,如果某個(gè)全屏應(yīng)用無(wú)法使用,這個(gè)設(shè)置可以將應(yīng)用放到窗口里:
啟用虛擬桌面后:
以上就是使用兼容引擎運(yùn)行 Windows 應(yīng)用時(shí)常見(jiàn)的各類問(wèn)題以及在問(wèn)題出現(xiàn)的情況下,怎樣借助相關(guān)工具以及日志來(lái)展開有效排查的方法內(nèi)容,記得收藏喲。
-
Linux
+關(guān)注
關(guān)注
87文章
11457瀏覽量
212761 -
WINDOWS
+關(guān)注
關(guān)注
4文章
3606瀏覽量
90918 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3322瀏覽量
58714
原文標(biāo)題:如何簡(jiǎn)單實(shí)現(xiàn)Windows應(yīng)用在Linux系統(tǒng)上的無(wú)縫運(yùn)行?
文章出處:【微信號(hào):linux_deepin,微信公眾號(hào):深度操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
不借助Linux系統(tǒng),在Windows下如何搭建ZMC900E交叉編譯環(huán)境

如何將FX3與WSL(Linux 的 Windows 子系統(tǒng))一起使用?
如何在i.MX 8XDXL EVK的A35上運(yùn)行Yocto Linux,在M4上運(yùn)行FreeRTOS?
請(qǐng)問(wèn)有什么外部LED驅(qū)動(dòng)器可以應(yīng)用在這個(gè)DLPC350驅(qū)動(dòng)板上?
如何在windows上emulate不同操作系統(tǒng)
請(qǐng)問(wèn)ISO7760能應(yīng)用在USB3.0數(shù)據(jù)上隔離嗎?
Docker運(yùn)行環(huán)境安裝
差動(dòng)放大器通常是應(yīng)用在什么場(chǎng)合?
美格智能5G智能模組SRM930成功運(yùn)行Windows 11系統(tǒng)
使用xtr111應(yīng)用在產(chǎn)品設(shè)計(jì)中,運(yùn)行一段時(shí)間過(guò)后設(shè)備不工作怎么解決?
求助,請(qǐng)問(wèn)TLV2464cpwr通用運(yùn)放有應(yīng)用在audio上的典型電路嗎?
“5G+Windows”推動(dòng)全場(chǎng)景數(shù)字化升級(jí):美格智能5G智能模組SRM930成功運(yùn)行Windows 11系統(tǒng)

gprsdemo在windows server系統(tǒng)上無(wú)法運(yùn)行的解決辦法
英國(guó)公司實(shí)現(xiàn)英偉達(dá)CUDA軟件在AMD GPU上的無(wú)縫運(yùn)行
研華工控機(jī)用什么系統(tǒng)?Windows與Linux操作系統(tǒng)的較量

評(píng)論