統(tǒng)信 Windows 應(yīng)用兼容引擎 V3.0 的推出,讓用戶可以在 deepin 系統(tǒng)上直接雙擊.exe文件運行 Windows 應(yīng)用程序。

近期,我們收到了大家諸多的反饋信息?;谶@些反饋,我們對使用兼容引擎運行 Windows 應(yīng)用時常見的各類問題進行了梳理,同時也整理出了在問題出現(xiàn)的情況下,怎樣借助相關(guān)工具以及日志來展開有效排查的方法。
1
綠色軟件和安裝程序的區(qū)別
安裝程序的文件名一般會帶有 Setup 或者 Installer, 雙擊之后的界面是這樣的:
會有設(shè)置安裝位置的選項;
點擊“下一步”之后會展示進度條,展示安裝目錄;
以及最重要的,在 Windows 桌面和開始菜單上創(chuàng)建快捷方式。

兼容引擎在運行的 exe 退出之后會自動去找它創(chuàng)建的快捷方式,然后添加到應(yīng)用列表中。 綠色軟件通常是一個壓縮包,解壓之后能看到主程序文件和一堆資源文件:

雙擊這種 exe 就可以直接運行,沒有安裝和創(chuàng)建快捷方式的過程。
2
雙擊exe安裝后,為什么有些應(yīng)用沒有添加到應(yīng)用列表
兼容引擎是在應(yīng)用退出之后才會將運行的 exe 添加到應(yīng)用列表中。
2.1
如果運行的 exe 是安裝程序
用戶自己停止安裝、或者運行的安裝程序沒有創(chuàng)建快捷方式;
安裝程序安裝完成后可能會自己啟動應(yīng)用,但應(yīng)用起不來;
或者應(yīng)用起來了,用戶點擊“關(guān)閉”的時候,進程沒有完全退出。 上述情形下,兼容引擎列表里可能不會有應(yīng)用快捷方式。
2.2
如果運行綠色軟件
-運行的應(yīng)用沒有完全退出,可以檢查應(yīng)用是否最小化到在托盤內(nèi) 對于應(yīng)用無法退出的情況,打開任務(wù)管理器,搜索 exe 的進程,然后選中,在右鍵菜單里面點擊“強制退出”:

3
如何運行 .Net 應(yīng)用
兼容引擎會自己去檢測運行的 exe 是否是 .Net 應(yīng)用,如果檢測到了會提示安裝修復:

此時點擊“修復”會安裝推薦的 .Net 版本。 如果在雙擊運行的時候沒有自動修復而是直接跳轉(zhuǎn)到運行失敗的界面,可以點擊“我要調(diào)試”,在彈出的配置界面里安裝 .Net Framework 框架。

在配置界面中,點擊“組件安裝”,在右側(cè)的搜索界面輸入“dotnet”,安裝需要的 .Net 版本:

也可以選擇安裝開源的 .Net Framework 實現(xiàn) Mono:

對于需要安裝 .Net Framework 的程序,聰明一點的應(yīng)用會彈一個彈窗,這時候根據(jù)上面的步驟安裝對應(yīng)的 .Net Framework 框架:

笨一點的程序就不會給彈窗,而是直接退出了,這時候就可以去看運行日志,判斷是不是安裝 .Net 就可以運行。

點擊應(yīng)用右側(cè)的“…”按鈕,打開“高級調(diào)試工具”。

在應(yīng)用圖標的上方右鍵,在彈出的右鍵菜單中選擇“在終端中運行”:

如果我們能在終端上看到:
err:mscoree:CLRRuntimeInfo_GetRuntimeHost Wine Mono is not installed這樣子的日志,就說明這個應(yīng)用需要安裝 .Net 才能正常運行:

4
安裝完成為什么沒有打包
應(yīng)用打包的入口已經(jīng)轉(zhuǎn)移到了主頁:

5
綠色軟件打包注意事項
在你開始打包時,如果要打包的應(yīng)用是一個綠色軟件,會彈出這樣子的提示:

至于什么時候該選“打包應(yīng)用本身”,什么情況選“打包文件夾”,取決于運行的應(yīng)用本身。 如果運行的綠色軟件是一個非常簡單的應(yīng)用,同級目錄下沒有任何文件就能夠跑起來,比如這樣:

那么在打包的時候可以直接選擇“打包應(yīng)用本身”,此時 deb 包里就僅包含這個 exe 文件。 但大多數(shù)情況下,大多數(shù)綠色軟件除了運行的 exe 以外,還會自帶運行的 dll、資源文件、各種配置文件,比如這樣:

那么打包的時候就需要選擇“打包文件夾”,然后選擇整個綠色軟件解壓后的路徑。兼容引擎只是默認打開 exe 所在的目錄,如果 exe 所在的層級目錄很深,你需要選擇更上層的文件夾才能保證將綠色軟件完全打包。
6
如何刪除應(yīng)用重新安裝
對于安裝程序,大多數(shù)應(yīng)用只會創(chuàng)建一個快捷方式,因此只需要點擊“卸載”就能完全移除應(yīng)用。

綠色軟件也是如此,只需要將點擊卸載就行。 如果一個應(yīng)用創(chuàng)建了多個快捷方式,那么在高級調(diào)試工具里能看到多個應(yīng)用圖標(比如 WPS Office):

此時只有將列表對應(yīng)的 exe 都點擊“卸載”后,才算是完全刪除了應(yīng)用。之后就可以重新允許安裝程序了:

7
應(yīng)用首次安裝成功可以運行,但是退出后再次運行,運行不起來
可以進入應(yīng)用的高級調(diào)試頁面,右擊應(yīng)用列表的圖標,點擊“在終端中運行”:

此時就可以進入用于調(diào)試的終端了:

如果應(yīng)用無法啟動,然后在終端里能看到這樣的錯誤
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īng)用缺失了 dll,而這些 dll 在當前版本的 wine 還沒有實現(xiàn)。這時候可以在“安裝組件”里搜索 dll 的名字,看是否能夠通過組件安裝 dll:

應(yīng)用可能缺多個 dll,在補完一個 dll 之后再次運行,又報一樣的錯誤,只不過 dll 的名字不一樣。一些小的應(yīng)用可以在“組件安裝”補完 dll 之后運行:

如果無法在組件列表中安裝缺失的 dll,那就只能自己從網(wǎng)上下載 dll 后,在高級調(diào)試界面的“調(diào)試工具”里打開容器 C 盤,將 dll 手動復制到 windows/system32 (或 windows/syswow64)下。
8
提示應(yīng)用正在運行
因為通過雙擊運行的應(yīng)用還沒有退出??梢圆榭搓P(guān)閉窗口后,應(yīng)用是否縮小到了托盤里。如果出現(xiàn)應(yīng)用崩潰而無法正常退出的情況,只能手動將崩潰的進程殺掉。打開“任務(wù)管理器”,搜索 exe,右擊找到的進程,在彈出的菜單里選擇“強制結(jié)束進程”。
9
如何收集日志
兼容引擎的日志路徑:
~/.local/share/deepin-wine-bottles/bottles.log~/.cache/deepin/deepin-wine-builder/deepin-wine-builder.log 運行應(yīng)用的 wine 日志:~/.local/share/deepin-wine-bottles/bottles/[應(yīng)用容器目錄]/logs
10
如何在已有的應(yīng)用列表中運行升級、安裝程序
現(xiàn)在的兼容引擎在每次雙擊、添加 exe 的時候都會單獨創(chuàng)建一個隔離的環(huán)境(容器)。如果需要在已經(jīng)創(chuàng)建的容器中運行安裝程序,可以在高級配置中選擇“調(diào)試工具”、單擊“應(yīng)用卸載器”:

在打開的應(yīng)用卸載器選擇“安裝”:

然后選擇要運行的安裝程序,如果不知道如何選擇路徑,可以先在瀏覽下拉框里選擇“/”(系統(tǒng)根目錄),然后一層一層向下選擇文件夾:

安裝程序安裝完成后,重新打開高級配置,可以在應(yīng)用列表的“+”號按鈕里添加安裝的 EXE:

11
高級調(diào)試工具詳細說明
這里主要說明運行應(yīng)用時的常見現(xiàn)象和對應(yīng)配置。
11.1
WineD3D 渲染方式
主要影響使用 3D 加速渲染的應(yīng)用,wine 提供了三種渲染方式:
gdi:禁用 3D 加速;
opengl :默認情況下 wine 將使用 OpenGL 實現(xiàn) Direct3D 渲染 API;
vulkan 使用 Vulkan 實現(xiàn) Direct3D 渲染 API,但實現(xiàn)并不完全。
如果應(yīng)用啟動黑屏:

可以嘗試將渲染方式設(shè)置成 gdi:

然后重新啟動:

11.2
顯示 DPI
主要影響應(yīng)用的文字顯示大小。在高分屏上如果應(yīng)用的顯示字體過小,可以拉高 DPI 的值:

默認 DPI(96)的顯示效果:

把 DPI 設(shè)置成 140 的顯示效果:

11.3
Dxvk、VkD3D
DXVK 是 Direct 11 的 Vulkan 實現(xiàn),而 VkD3D 是 Direct 12 的 Vulkan 實現(xiàn)。在設(shè)置安裝好 Vulkan 驅(qū)動后,就可以通過設(shè)置這兩個選項來運行游戲了。

以 deepin 23 為例, A 卡用戶需要安裝 mesa-vulkan-drivers 。打開終端,然后輸入下面的命令:
sudoaptinstallmesa-vulkan-drivers 對于 N 卡用戶,需要安裝 nvdia-vulkan-icd :sudoaptinstallnvidia-vulkan-icd 然后安裝 vulkan-tools ,運行 vkcube ,能彈出 vkcube 的 demo,說明 Vulkan 顯卡驅(qū)動設(shè)置完成了:sudoaptinstallvulkan-tools vkcube

可以看下使用 dxvk 前后的幀率對比。不使用 dxvk 的游戲處于不可玩的狀態(tài)(0幀、渲染一幀需要6秒):

切換成 dxvk 之后:

dxvk 對顯卡驅(qū)動是有要求的( https://github.com/doitsujin/dxvk/wiki/Driver-support、https://github.com/doitsujin/dxvk/wiki/Driver-support),2.0 之后的 dxvk 的要求(需要 Vulkan 1.3 的驅(qū)動):

dxvk 1.10.3 及以下版本的顯卡要求(需要 Vulkan 1.1 的驅(qū)動):

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 版本下的會出現(xiàn)不同的行為。有的應(yīng)用在高版本的 Windows 上,使用兼容引擎無法啟動,此時可以將 Windows 版本設(shè)置成 Windows 7 或者更低版本來解決。

因為有的應(yīng)用會使用高版本 Windows 才有的 API,而 wine 本身又恰巧沒有實現(xiàn),此時使用高版本的 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 之后的系統(tǒng)使用,但在 wine 里還沒有實現(xiàn)完全導致安裝程序無法啟動。 將 Windows 的版本設(shè)置成 Windows 7,應(yīng)該可以避免應(yīng)用走到剛才壞的路徑:

修改后安裝程序可以運行了:

如果應(yīng)用使用 deepin-wine8-stable 無法打開,可以考慮將 wine 版本切換成后續(xù)的 deepin-wine-staging,使用新的 wine9 運行,高版本的 wine 實現(xiàn)了更多的功能。
11.5
DLL 覆蓋
wine 自己實現(xiàn)了一套 Windows 核心的模塊(dll)。我們把 wine 自己實現(xiàn)的 dll 稱作 builtin(內(nèi)建 dll),把 Windows 上現(xiàn)成的 dll 稱作 native(原生 dll),而 wine 加載所有的 dll 文件時,都會優(yōu)先載入內(nèi)建的 dll。當我們需要讓 wine 使用 Windows 上現(xiàn)成的 dll 時,就需要設(shè)置 DLL 覆蓋。 wine 除了實現(xiàn) Windows 核心 dll 以外(gdi32,kernel32,user32…),還實現(xiàn)了其他外圍的 dll。(msxml、riched20、winnet…) 使用兼容引擎時,有時候會因為內(nèi)建 dll 出現(xiàn)界面異常、崩潰的問題,這時候我們可以嘗試使用 Windows 的原生 dll 來運行。

比方說應(yīng)用內(nèi)輸入框光標偏移的問題:

就可通過使用 Windows 原生的 riched20.dll 解決 。原生的 riched20.dll 可以直接從網(wǎng)上下載,或者從其它 Windows 的 C 盤復制出來。打開應(yīng)用的高級調(diào)試工具,點擊“調(diào)試工具”,點擊下方的“打開C盤”:

將原生的 riched20.dll 復制到容器 C 盤下方的 windows/system32 目錄下:

然后將 riched20 設(shè)置成“原生優(yōu)于內(nèi)建”:

此時再次啟動應(yīng)用:

兼容引擎維護了一些常見的安裝 Windows 運行庫的配置腳本(組件),并自動將相關(guān)的 dll 設(shè)置成“原生優(yōu)于內(nèi)建”。比如光標上面的例子,可以直接在“組件安裝”里搜索 riched20 然后安裝:

支持的加載方式有:
原生(Windows):僅加載原生 dll ,如果這個 dll 加載失敗,應(yīng)用將無法啟動;
內(nèi)建(Windows):僅加載內(nèi)建的 dll;
原生優(yōu)于內(nèi)建:優(yōu)先加載原生 dll 文件,原生 dll 加載失敗時,再去加載內(nèi)建 dll;
內(nèi)建優(yōu)于原生:優(yōu)先加載內(nèi)建 dll,內(nèi)建 dll 加載失敗時,再去加載原生 dll;
禁用:禁用 dll或應(yīng)用程序。
11.6
字體替換
字體替換其實是對應(yīng)用的一種“欺騙”,當應(yīng)用加載字體 A 時,可以通過 wine 讓應(yīng)用去加載其他字體。比如應(yīng)用希望加載宋體、黑體、微軟雅黑等字體,但這些字體沒有在系統(tǒng)上安裝,此時就可以通過字體替換欺騙應(yīng)用去加載其他字體。 應(yīng)用找不到宋體時:

在高級調(diào)試工具將宋體替換成系統(tǒng)自帶的襯線字體:

替換之后再打開應(yīng)用:

11.7
調(diào)試工具
用來啟動 wine 自帶的小工具:
打開C盤,將通過文件管理器打開容器 C 盤所在的文件夾;
注冊表編輯器, 打開 wine 自帶的注冊表編輯器(regedit.exe);
任務(wù)管理器,打開 wine 自帶的任務(wù)管理器(taskmgr.exe);
應(yīng)用卸載器, 打開 wine 自帶的應(yīng)用卸載器(uninstall.exe);
wine配置,打開 wine 自帶的容器配置工具(winecfg.exe);
退出所有應(yīng)用,殺掉所有正在運行的 exe。

如果應(yīng)用運行的時候,系統(tǒng)的標題欄蓋住了界面,而無法正常使用,比如這樣:

此時就可以打開 “wine 配置”,禁用掉窗口裝飾(取消勾選“允許窗口管理器裝飾窗口”):

在 wine 設(shè)置點擊“確定”后,再次打開應(yīng)用:

在 wine 設(shè)置勾選虛擬桌面,可以將應(yīng)用顯示在單獨的窗口中,如果某個全屏應(yīng)用無法使用,這個設(shè)置可以將應(yīng)用放到窗口里:

啟用虛擬桌面后:

以上就是使用兼容引擎運行 Windows 應(yīng)用時常見的各類問題以及在問題出現(xiàn)的情況下,怎樣借助相關(guān)工具以及日志來展開有效排查的方法內(nèi)容,記得收藏喲。
-
Linux
+關(guān)注
關(guān)注
88文章
11622瀏覽量
217815 -
WINDOWS
+關(guān)注
關(guān)注
4文章
3694瀏覽量
93162 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3342瀏覽量
59900
原文標題:如何簡單實現(xiàn)Windows應(yīng)用在Linux系統(tǒng)上的無縫運行?
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
MCUCW32A030C8T7都應(yīng)用在哪些場景?
在Windows10上運行vivado使用tcl文件創(chuàng)建E203項目路徑錯誤的問題
Windows作系統(tǒng)可以在 ARM926EJ-S 上運行嗎?
Docker運行GPUStack的詳細教程
龍芯處理器支持WINDOWS嗎?
統(tǒng)信Windows應(yīng)用兼容引擎V3.3.0更新
不借助Linux系統(tǒng),在Windows下如何搭建ZMC900E交叉編譯環(huán)境
如何在FX3和FX10芯片上運行/實現(xiàn)USB 3.0批量流?
如何將FX3與WSL(Linux 的 Windows 子系統(tǒng))一起使用?
如何在i.MX 8XDXL EVK的A35上運行Yocto Linux,在M4上運行FreeRTOS?
在Windows上安裝OpenVINO?運行時遇到錯誤怎么解決?
請問有什么外部LED驅(qū)動器可以應(yīng)用在這個DLPC350驅(qū)動板上?
基于OpenSBI的linux nommu實現(xiàn)

如何實現(xiàn)Windows應(yīng)用在Linux系統(tǒng)上的無縫運行
評論