如何从 Windows 可执行文件(EXE)中提取图标

大瑶同学_2565

大瑶同学_2565

2026-10-24

321人浏览

原创

如何从 Windows 可执行文件(EXE)中提取图标

本文介绍在 Electron 应用中,通过 icon-extractor 库从 .exe 或 .url 等文件中高效提取图标的完整实现方案,包含主进程调用、事件监听与 Base64 图标数据获取。

本文介绍在 electron 应用中,通过 icon-extractor 库从 .exe 或 .url 等文件中高效提取图标的完整实现方案,包含主进程调用、事件监听与 base64 图标数据获取。

在 Electron 桌面应用开发中,常需为用户选择的可执行文件(如 .exe)或快捷方式(.url)动态显示其系统关联图标,以提升界面友好性与专业度。直接读取二进制文件解析图标资源复杂且跨平台兼容性差,推荐使用专为 Node.js 设计的 icon-extractor 库——它基于 Windows API(仅支持 Windows 平台),能准确提取 .exe、.dll、.ico、.url 等文件内嵌的多尺寸图标,并返回高质量 Base64 编码的 PNG 数据。

✅ 基础准备

首先安装依赖(注意:该库仅适用于 Windows,构建时需确保 target 为 win32):

npm install icon-extractor

并在主进程(main.js 或 main.ts)顶部引入:

const iconExtractor = require('icon-extractor');

⚠️ 注意:icon-extractor 依赖原生 Windows 图标提取逻辑,不支持 macOS 或 Linux。若需跨平台方案,应结合 file-icon(基于系统命令)或 Electron 内置 app.getFileIcon()(仅限 macOS/Linux,Windows 上返回通用图标)——但后者无法精确提取 .exe 内嵌图标。

✅ 主进程集成示例

以下是在 ipcMain 处理文件选择后提取图标的完整流程:

windows-shell
windows-shell

Windows 命令行编码与兼容规范。涵盖 GBK/UTF-8 编码、PowerShell/pwsh 互操作、Python/Node.js、Git 配置及代码生成规则。适用于 Windows 10/11 + MSYS2/Git Bash 环境下的所有命令行操作。

下载
const { app, dialog } = require('electron');
const iconExtractor = require('icon-extractor');

// 监听图标提取完成事件
iconExtractor.emitter.on('icon', (data) => {
  console.log('上下文:', data.Context);
  console.log('文件路径:', data.Path);
  console.log('Base64 图标:', data.Base64ImageData.substring(0, 64) + '...'); // 预览前64字符

  // 可通过 IPC 发送给渲染进程
  mainWindow.webContents.send('file-icon-received', {
    context: data.Context,
    path: data.Path,
    icon: data.Base64ImageData
  });
});

// 注册打开文件对话框事件
ipcMain.on('open-file-dialog', async () => {
  const result = await dialog.showOpenDialog({
    properties: ['openFile'],
    filters: [
      { name: '可执行文件', extensions: ['exe'] },
      { name: '快捷方式', extensions: ['url'] },
      { name: '所有文件', extensions: ['*'] }
    ]
  });

  if (!result.canceled && result.filePaths.length > 0) {
    const filePath = result.filePaths[0];
    // 触发图标提取(第二个参数为文件路径,第一个为自定义上下文标识)
    iconExtractor.getIcon('file-select-dialog', filePath);
  }
});

✅ 渲染进程接收与使用图标

在渲染进程(如 renderer.js)中监听图标数据并渲染:

window.ipcRenderer.on('file-icon-received', (event, payload) => {
  const img = document.getElementById('file-icon');
  if (img) {
    img.src = `data:image/png;base64,${payload.icon}`;
    img.alt = `图标:${payload.path}`;
  }
});

HTML 示例:

@@##@@

? 补充说明与最佳实践

  • 图标质量:icon-extractor 默认提取最佳匹配尺寸(通常为 256×256),内部自动缩放并转为 PNG,无需额外处理;
  • 错误处理:若文件无图标资源(如纯文本 .exe 打包器生成的无效 PE),emitter 不会触发 'icon' 事件;建议增加超时机制或 fallback 图标;
  • 性能提示:图标提取为同步阻塞操作(调用 Windows ExtractIconExW),建议在 showOpenDialog 后异步触发,避免 UI 卡顿;
  • 安全提醒:切勿将用户提供的 .exe 路径直接拼接进 eval 或 shell 命令;本方案全程在 Node.js 安全上下文中运行,无代码注入风险。

通过以上集成,你的 Electron 应用即可在 Windows 平台上稳定、高效地为任意 .exe 文件呈现其原始系统图标,显著增强桌面级体验的专业感与一致性。

文件图标

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

windows

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3279

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

2838

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1488

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2599

5

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.08

3310

4

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

1637

3

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2023.08.28

2497

4

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.30

4987

5

Window.setInterval()方法
Window.setInterval()方法

Window.setInterval() 方法的基本语法是“window.setInterval(function, delay)”,function是要重复执行的函数或代码块,delay是每次执行之间的时间间隔,以毫秒为单位。本专题为大家提供Window.setInterval()相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

735

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习