感圖標的3步實操)
WinApps圖標提取全解讓Windows應用在Linux桌面擁有原生質(zhì)感圖標的3步實操【免費下載鏈接】winappsRun Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration. Hard fork of https://github.com/Fmstrat/winapps/項目地址: https://gitcode.com/GitHub_Trending/wina/winappsWinApps讓Microsoft 365、Adobe這類Windows應用在Linux桌面上像本地程序一樣運行。本文帶你拆解它從EXE文件中提取應用圖標的完整機制圖標從哪來、怎么跨系統(tǒng)傳到Linux、哪幾個文件值得你翻一翻以及提取失敗時圖標變成灰方塊該怎么救。 為什么需要它你在Linux上跑通WinApps后打開應用菜單看到的卻是一排默認方塊圖標——因為Linux并不知道Windows里那些程序長什么樣。WinApps的做法是讓Windows自己報戶口掃描已安裝的應用程序把每個程序關(guān)聯(lián)的圖標抓出來再為它在桌面上生成一個帶正確圖標的.desktop快捷方式。于是一個EXE文件最終變成了應用菜單里一個有名字、有圖標、能點擊就啟動的原生入口。?? 它到底怎么做的核心鏈路就三段跨了Windows和Linux兩個系統(tǒng)輸入Windows虛擬機里裝好的所有.exe文件來源包括Windows注冊表、UWP、Chocolatey、Scoop處理PowerShell腳本install/ExtractPrograms.ps1調(diào)用.NET的ExtractAssociatedIcon從每個EXE里讀出關(guān)聯(lián)圖標轉(zhuǎn)成PNG后編碼為base64字符串連同應用名、可執(zhí)行路徑一起打印成bash數(shù)組輸出setup.sh讀回這些數(shù)組把base64解碼成icon.png寫入每個應用自己的目錄并生成.desktop文件引用它。一個非直覺的設(shè)計為什么傳PNG而不是直接傳.ico因為PNG跨平臺通用、Linux端解碼零依賴而base64文本能安全地塞進bash數(shù)組隨RDP會話傳回像把圖片塞進信封寄回來一樣。 從EXE到桌面圖標的完整流程應用發(fā)現(xiàn)ExtractPrograms.ps1在Windows側(cè)注冊表App Paths、UWP包、Chocolatey/Scoop的shim目錄里各掃一遍拿到應用名和EXE路徑——因為這是圖標提取的前提必須先知道有哪些程序。圖標抽取對每個EXE調(diào)用ExtractAssociatedIcon取出關(guān)聯(lián)圖標這是整個鏈路里唯一真正讀圖的環(huán)節(jié)。格式與編碼圖標畫到Bitmap上以PNG格式寫入內(nèi)存流再轉(zhuǎn)成base64——PNG保留色深base64保證能安全地以純文本形式跨越兩個操作系統(tǒng)。結(jié)果回傳所有結(jié)果以NAMES()、EXES()、ICONS()三組bash數(shù)組的形式寫入~/.local/share/winapps/detected文件Linux端直接source它。解碼落盤setup.sh對每個選中的應用執(zhí)行base64 -d把圖標寫成icon.png存到~/.local/share/winapps/apps/應用名/下。生成快捷方式寫入info文件應用名、Windows內(nèi)EXE路徑、分類再生成.desktop文件并指向該圖標應用菜單即刻可見。順帶一提社區(qū)已測試過的應用如Word、Photoshop不走這套提取流程而是直接使用倉庫apps/目錄下的預置高分辨率icon.svg畫質(zhì)明顯好于從EXE里抽的小圖標。 文件與資源速查install/ExtractPrograms.ps1 — 圖標提取的核心腳本GetApplicationIcon函數(shù)就是提取邏輯本體setup.sh — 安裝主腳本waConfigureDetectedApps和waConfigureApp負責解碼圖標、生成.desktopapps/ — 社區(qū)測試應用的預置目錄每個子文件夾含icon.svg和info配置docs/libvirt.md / docs/docker.md — 官方文檔兩種后端環(huán)境的搭建指南?? 圖標提取失敗或圖標丑陋的三種常見原因現(xiàn)象圖標是灰白色32x32小方塊→ 原因ExtractAssociatedIcon提取失敗腳本走了內(nèi)置的通用PNG兜底 → 處理確認該EXE在Windows里本身有圖標若應用屬于社區(qū)列表卻沒用上SVG檢查apps/下對應目錄名是否拼寫一致?,F(xiàn)象圖標放大后發(fā)虛、有鋸齒→ 原因ExtractAssociatedIcon只取EXE內(nèi)嵌的默認圖標通常是32x32不會挑多尺寸ICO里的最大版本 → 處理對常看的應用手動在~/.local/share/winapps/apps/應用名/下?lián)Q成更大的PNG/SVG再重新跑一次安裝?,F(xiàn)象detected文件讀入后數(shù)組全空或解碼報錯→ 原因文件由Windows寫入行尾是\r\n而手工處理base64時混入的\r會讓解碼直接失敗setup.sh內(nèi)部已用sed處理過 → 處理自己調(diào)試時先sed -i s/\r//g清一遍再source。 上手三步克隆并進入倉庫git clone https://gitcode.com/GitHub_Trending/wina/winapps后cd winapps按docs/libvirt.md或docs/docker.md準備好一臺能跑RDP的Windows虛擬機/容器執(zhí)行./setup.sh按提示選擇安裝方式并勾選要配置的應用驗證標準跑完后打開Linux應用菜單或Nautilus右鍵打開方式能看到Word、Photoshop等應用的彩色圖標且點擊即可啟動即說明圖標鏈路已打通。 還能拿它做什么ExtractPrograms.ps1里的GetApplicationIcon函數(shù)幾乎不依賴WinApps本體你可以把它單獨拿出來作為批量從一批EXE文件里抽圖標、轉(zhuǎn)PNG的工具用。另外source一個bash數(shù)組文件這種跨系統(tǒng)傳結(jié)構(gòu)化數(shù)據(jù)的手法在你自己寫Windows-Linux混合自動化腳本時也值得抄?!久赓M下載鏈接】winappsRun Windows apps such as Microsoft Office/Adobe in Linux (Ubuntu/Fedora) and GNOME/KDE as if they were a part of the native OS, including Nautilus integration. Hard fork of https://github.com/Fmstrat/winapps/項目地址: https://gitcode.com/GitHub_Trending/wina/winapps創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考