有没有一种命令行实用工具可以更改win32可执行文件的嵌入式图标?

13

我希望能找到一个可以整合到我的构建过程中的工具:是否有任何“标准”的工具可以做到这一点?


1
如果您在构建过程中进行此操作,为什么需要事后更改图标?为什么不一开始就使用正确的图标进行构建呢?(请参见Ville Laurikari的答案)。 - Nick Meyer
请看我的回复意见,针对他的答案。 - jkp
1
有时候需要在实际构建之后更新文件版本(插入 SVN 或 CVS 修订版,而不改变源代码)。但我真的看不出为什么需要更改图标。 - Kirill V. Lyadvinsky
4个回答

8

我尝试使用Resource Hacker 4.2.5替换7z自解压文件中的图标,但失败了。我的exe文件中有两个图标1:0、2:0和一个图标组101:0。我想替换图标数据并保持资源索引不变,这应该是最直接的方法。根据我对PE格式的了解,这是可行的,但RH4.2.5无法实现这一点。 - fpemud
很遗憾,Resource hacker v5.1.7生成的二进制文件存在某种损坏,无法再由signtool.exe签名。 - cxxl

4
您需要创建一个资源脚本文件(.rc),然后使用rc将其编译为对象文件(.rc.res),再使用cvtres将其转换为目标文件(.res.obj)。这两个工具都包含在Microsoft平台SDK中。当您将该目标文件包含到链接器命令中时,结果将具有资源脚本文件中指定的图标。以下是一个示例资源文件和创建对象的命令:
101          ICON                    "my_icon.ico"

你的图标文件在 my_icon.ico 文件中。将它们编译成对象文件的命令如下:

rc -fo resource.res resource.rc
cvtres -machine:ix86 -out:resource.obj resource.res

但是,迄今为止设置程序图标最简单的方法就是在 Visual Studio 中进行操作

从技术上讲,两种方法都不能真正地更改现有可执行文件的图标,但我想您可能并不需要这样做。


2
不,我真的需要!原因很复杂:我需要向使用PyInstaller构建的某些实用程序添加自定义图标。问题在于,开箱即用的功能依赖于pywin32,这没问题,但是我在由virtualenv和pip组合提供的沙盒中运行我的构建:不幸的是,我找不到任何方法来安装pywin32:似乎没有办法在这个环境中构建它。因此,为了避免这个问题,我想在PyInstaller完成后能够更改图标。 - jkp

3

我非常确定Resource Hacker可以做到这一点,以及其他一些事情。我相信我曾经使用过它,我认出了它的图标。希望这能帮到你!


太棒了:几乎完美,但是我不能将其作为我的构建过程的一部分运行,因为它不是基于命令行的。这是一个有趣的链接,点赞。 - jkp
我发现了这个网站:http://www.heaventools.com/command-line_resource_editor.htm。可惜他们要求支付过高的费用。 - jkp
它不是一个控制台应用程序,但您仍然可以使用参数运行它并执行单个“操作”,而无需用户交互。如果您需要执行多个操作,它还支持脚本文件。 - Anders

3

1
不幸的是,后来我发现它并不完全具备功能。但只要付出一点努力,就有可能完成它:因为它只是一个 cpp 源代码文件,代码非常简洁。 - jkp
我放弃了这个工具,因为我不想为像更改图标这样的小任务安装Python。 - fpemud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接