統信 Windows 應用兼容引擎 V3.0 的推出,讓用戶可以在 deepin 系統上直接雙擊.exe文件運行 Windows 應用程序。
近期,我們收到了大家諸多的反饋信息。基于這些反饋,我們對使用兼容引擎運行 Windows 應用時常見的各類問題進行了梳理,同時也整理出了在問題出現的情況下,怎樣借助相關工具以及日志來展開有效排查的方法。
1
綠色軟件和安裝程序的區別
安裝程序的文件名一般會帶有 Setup 或者 Installer, 雙擊之后的界面是這樣的:
會有設置安裝位置的選項;
點擊“下一步”之后會展示進度條,展示安裝目錄;
以及最重要的,在 Windows 桌面和開始菜單上創建快捷方式。
兼容引擎在運行的 exe 退出之后會自動去找它創建的快捷方式,然后添加到應用列表中。 綠色軟件通常是一個壓縮包,解壓之后能看到主程序文件和一堆資源文件:
雙擊這種 exe 就可以直接運行,沒有安裝和創建快捷方式的過程。
2
雙擊exe安裝后,為什么有些應用沒有添加到應用列表
兼容引擎是在應用退出之后才會將運行的 exe 添加到應用列表中。
2.1
如果運行的 exe 是安裝程序
用戶自己停止安裝、或者運行的安裝程序沒有創建快捷方式;
安裝程序安裝完成后可能會自己啟動應用,但應用起不來;
或者應用起來了,用戶點擊“關閉”的時候,進程沒有完全退出。 上述情形下,兼容引擎列表里可能不會有應用快捷方式。
2.2
如果運行綠色軟件
-運行的應用沒有完全退出,可以檢查應用是否最小化到在托盤內 對于應用無法退出的情況,打開任務管理器,搜索 exe 的進程,然后選中,在右鍵菜單里面點擊“強制退出”:
3
如何運行 .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 才能正常運行:
4
安裝完成為什么沒有打包
應用打包的入口已經轉移到了主頁:
5
綠色軟件打包注意事項
在你開始打包時,如果要打包的應用是一個綠色軟件,會彈出這樣子的提示:
至于什么時候該選“打包應用本身”,什么情況選“打包文件夾”,取決于運行的應用本身。 如果運行的綠色軟件是一個非常簡單的應用,同級目錄下沒有任何文件就能夠跑起來,比如這樣:
那么在打包的時候可以直接選擇“打包應用本身”,此時 deb 包里就僅包含這個 exe 文件。 但大多數情況下,大多數綠色軟件除了運行的 exe 以外,還會自帶運行的 dll、資源文件、各種配置文件,比如這樣:
那么打包的時候就需要選擇“打包文件夾”,然后選擇整個綠色軟件解壓后的路徑。兼容引擎只是默認打開 exe 所在的目錄,如果 exe 所在的層級目錄很深,你需要選擇更上層的文件夾才能保證將綠色軟件完全打包。
6
如何刪除應用重新安裝
對于安裝程序,大多數應用只會創建一個快捷方式,因此只需要點擊“卸載”就能完全移除應用。
綠色軟件也是如此,只需要將點擊卸載就行。 如果一個應用創建了多個快捷方式,那么在高級調試工具里能看到多個應用圖標(比如 WPS Office):
此時只有將列表對應的 exe 都點擊“卸載”后,才算是完全刪除了應用。之后就可以重新允許安裝程序了:
7
應用首次安裝成功可以運行,但是退出后再次運行,運行不起來
可以進入應用的高級調試頁面,右擊應用列表的圖標,點擊“在終端中運行”:
此時就可以進入用于調試的終端了:
如果應用無法啟動,然后在終端里能看到這樣的錯誤
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
這是因為應用缺失了 dll,而這些 dll 在當前版本的 wine 還沒有實現。這時候可以在“安裝組件”里搜索 dll 的名字,看是否能夠通過組件安裝 dll:
應用可能缺多個 dll,在補完一個 dll 之后再次運行,又報一樣的錯誤,只不過 dll 的名字不一樣。一些小的應用可以在“組件安裝”補完 dll 之后運行:
如果無法在組件列表中安裝缺失的 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 的時候都會單獨創建一個隔離的環境(容器)。如果需要在已經創建的容器中運行安裝程序,可以在高級配置中選擇“調試工具”、單擊“應用卸載器”:
在打開的應用卸載器選擇“安裝”:
然后選擇要運行的安裝程序,如果不知道如何選擇路徑,可以先在瀏覽下拉框里選擇“/”(系統根目錄),然后一層一層向下選擇文件夾:
安裝程序安裝完成后,重新打開高級配置,可以在應用列表的“+”號按鈕里添加安裝的 EXE:
11
高級調試工具詳細說明
這里主要說明運行應用時的常見現象和對應配置。
11.1
WineD3D 渲染方式
主要影響使用 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 。打開終端,然后輸入下面的命令:
sudoaptinstallmesa-vulkan-drivers 對于 N 卡用戶,需要安裝 nvdia-vulkan-icd :sudoaptinstallnvidia-vulkan-icd 然后安裝 vulkan-tools ,運行 vkcube ,能彈出 vkcube 的 demo,說明 Vulkan 顯卡驅動設置完成了:sudoaptinstallvulkan-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 應用時常見的各類問題以及在問題出現的情況下,怎樣借助相關工具以及日志來展開有效排查的方法內容,記得收藏喲。
-
Linux
+關注
關注
87文章
11312瀏覽量
209689 -
WINDOWS
+關注
關注
4文章
3550瀏覽量
88793 -
應用程序
+關注
關注
37文章
3276瀏覽量
57733
原文標題:如何簡單實現Windows應用在Linux系統上的無縫運行?
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論