You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

寻求可提取标准ICO文件的EXE图标提取工具

解决EXE图标提取后无法被PowerShell转EXE工具识别的问题

首先,你原来的PowerShell脚本之所以会出问题,是因为它把提取到的Icon对象转换成Bitmap再保存为ICO格式——这个过程会丢失原生ICO文件的多尺寸图标数据、资源结构信息,导致生成的文件不符合部分工具要求的标准ICO规范。

下面推荐几个可以提取原生标准ICO文件的工具,不管是命令行批量处理还是图形界面操作都有合适的选择:

命令行工具(适合批量/自动化场景)

  • Resource Hacker(命令行版)
    这是老牌的资源编辑工具,支持直接从EXE中提取原生的ICO资源,完全保留原始格式。你可以用以下命令批量提取:

    # 假设ResourceHacker.exe在当前路径或已加入环境变量
    $targetFolder = "C:\TMP_7423\icons"
    md $targetFolder -ea 0 | Out-Null
    dir $env:windir *.exe -ea 0 -rec | ForEach-Object {
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($_.FullName)
        Write-Progress "Extracting Icon" $baseName
        ResourceHacker.exe -open $_.FullName -save "$targetFolder\$baseName.ico" -action extract -mask ICONGROUP,MAINICON,
    }
    

    它提取的是EXE中原本的ICONGROUP资源,完全符合标准ICO格式,不会有转换导致的兼容性问题。

  • 7-Zip
    很多人不知道7-Zip可以直接读取PE文件(EXE/DLL)的资源段,你可以用它直接提取里面的ICO文件:

    $targetFolder = "C:\TMP_7423\icons"
    md $targetFolder -ea 0 | Out-Null
    dir $env:windir *.exe -ea 0 -rec | ForEach-Object {
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($_.FullName)
        Write-Progress "Extracting Icon" $baseName
        # 提取EXE中的所有ICO文件到临时子文件夹
        7z e $_.FullName -o"$targetFolder\$baseName" "*.ico" -y | Out-Null
        # 将提取的ICO重命名为统一文件名并清理临时文件夹
        if (Test-Path "$targetFolder\$baseName\*.ico") {
            Rename-Item (Get-ChildItem "$targetFolder\$baseName\*.ico")[0].FullName "$targetFolder\$baseName.ico"
            Remove-Item "$targetFolder\$baseName" -Recurse -Force
        }
    }
    

图形界面工具(适合手动操作/少量提取)

  • IconViewer
    一款轻量的右键扩展工具,安装后只需右键点击EXE文件,选择「Extract Icons」就能保存标准ICO文件,支持选择提取不同尺寸的图标,操作非常简便。

  • Axialis IconWorkshop
    专业级的图标编辑与提取工具,不仅能批量提取EXE/DLL中的图标,还能编辑和生成符合各种规范的ICO文件(包括多尺寸、高DPI支持),生成的图标兼容性拉满,完全能满足你的PowerShell转EXE工具的需求。

内容的提问来源于stack exchange,提问作者Private ZkAw

火山引擎 最新活动