尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WinApps 图标提取全解:从 EXE 快速拿到高清应用图标

WinApps 图标提取全解:从 EXE 快速拿到高清应用图标 WinApps 图标提取全解从 EXE 快速拿到高清应用图标【免费下载链接】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你在 Linux 桌面里运行 Word、Photoshop却希望图标和启动方式都像原生应用——WinApps 的图标提取功能就是为此设计的它在 Windows 虚拟机里扫描已安装程序从每个 EXE 中取出图标转成 PNG 后以 base64 形式送回 Linux 端最终写进 .desktop 文件全程无需手动抠图。WinApps 图标提取的完整流程把整条链路拆开只有四步阶段做什么在哪里完成应用发现从注册表 App Paths、UWP、Chocolatey、Scoop 四处收集已装程序Windows 侧图标提取用 ExtractAssociatedIcon 取图标转 PNG 并编码为 base64Windows 侧数据回传结果以 bash 数组形式写入 detected 文件跨系统图标落地Linux 端解码为 icon.png生成 .desktop 快捷方式Linux 侧核心文件就两个负责扫描与提取的是 install/ExtractPrograms.ps1负责通过 RDP 调度它并消费结果的是 setup.sh。 图标到底是怎么从 EXE 里抠出来的提取逻辑集中在GetApplicationIcon函数里思路很直接加载 System.Drawing 程序集调用[System.Drawing.Icon]::ExtractAssociatedIcon取出 EXE 的关联图标把图标画到 Bitmap 上再以 PNG 格式写入内存流——选 PNG 是为了保留完整色彩深度用Convert::ToBase64String把 PNG 字节变成字符串跟着文本一起传回 Linux。程序名也顺带取好优先读 EXE 版本信息里的 FileDescription读不到就退回文件名。若 EXE 没有内嵌图标或读取失败脚本会返回一段写死的 32x32 通用 PNG 兜底菜单里不会出现空图标。两种图标来源内置 SVG 与 EXE 提取的 PNGapps/ 目录下每个社区测试过的应用都有一个子文件夹内含 info 配置和高清 icon.svg如 apps/word/icon.svg。info 里存着 Windows 内的可执行路径、MIME 类型等元数据安装时 setup.sh 会把整个文件夹拷到本地数据目录并用实际扫描到的路径替换默认可执行地址。检测到的其他程序走动态提取路线base64 字符串经base64 -d解码后写成该应用目录下的 icon.png。两类图标最终殊途同归——.desktop 的 Icon 字段都指向它们再配上 StartupWMClass 与 MimeTypeNautilus 这类文件管理器才能实现双击 docx 直接弹 Word的原生体验Office 的 URI 协议ms-word: 等则由 apps/ms-office-protocol-handler.desktop 接管。⚠️ WinApps 图标不显示时的排查步骤扫描没跑成功图标数据来自远程扫描前提是 Windows 能通过 RDP 连上、虚拟机libvirt 下默认命名 RDPWindows处于运行状态。失败时看~/.local/share/winapps下的 FreeRDP 日志或把配置中的 APP_SCAN_TIMEOUT 调大名字或图标回退应用显示成 exe 文件名、图标是灰白方块说明 EXE 缺版本信息或没有内嵌图标属于预期内的兜底行为新装程序没进菜单图标扫描在安装时执行一次之后在 Windows 里新装的应用需要重跑winapps-setup --user --add-apps才会被发现并重新提取图标。不装 WinApps也能用它批量提取 EXE 图标ExtractPrograms.ps1 是自包含的把它拷到任意 Windows 机器上用powershell -ExecutionPolicy Bypass -File运行输出就是 NAMES、EXES、ICONS 三组 bash 数组ICONS 每项解码即一张 PNG写个小循环就能批量建立自己的启动器图标库。两个局限要提前知道ExtractAssociatedIcon 只返回 EXE 关联的主图标.ico 资源里的小尺寸版本拿不到同名应用从注册表与包管理器各出现一次时靠 [CHOCO]、[SCOOP] 后缀区分。下一步可以先把 setup.sh 的完整流程跑一遍打开~/.local/share/winapps/detected看看数组长什么样再单独执行一遍 ExtractPrograms.ps1把批量提取的思路挪进你自己的桌面工具里。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表