通过ilasm更改可执行图标

本文关键字:可执行 图标 ilasm 通过 | 更新日期: 2023-09-27 18:19:16

我有一个安装程序与嵌入式。resx文件与一些信息,如服务器名称,端口,密码等…我必须生成这个安装程序(这个过程是自动化的,并通过我们的网站完成)为每个客户。运行得很好我使用ildasm进行反汇编并替换resx文件,然后我使用ilasm再次制作。exe。但是在这个过程之后。exe失去了我们的图标,把默认的放在它的位置。

我找不到改变默认图标的方法。

谢谢

通过ilasm更改可执行图标

你错过了c#程序中一个相当模糊的细节。编译器生成的可执行文件还包含非托管资源。必需的,因为Windows不知道任何托管资源。这是你可以在Visual Studio中看到的。使用File + Open + File,选择c#编译器生成的。exe文件。需要RTM版本,不支持Express。

您将看到程序中至少有3个节点:

  • RT_MANIFEST包含可执行文件的清单。在以后的Windows版本中非常重要,它声明程序与UAC兼容。它可以防止Windows将您的程序视为早期的Windows程序,当它执行UAC 禁止时需要说谎,例如尝试将文件写入受保护的目录并尝试在HKLM中创建注册表项。清单的内容在大多数程序中是默认的,您可以通过"Application manifest File"项目项模板获得自定义清单。

  • "Version"包含可执行文件的版本资源。它包含您在使用Windows资源管理器查看可执行文件属性时看到的信息。它的内容是从AssemblyInfo.cs源代码文件中的[assembly:]属性自动生成的。

  • "Icon"包含程序的图标资源。

您需要使用ilasm.exe的/resource选项来将这些非托管资源嵌入到补丁的可执行文件中。这需要一个.res文件,即由rc.exe Windows SDK工具生成的非托管资源的编译版本。请注意,项目+属性,应用程序选项卡,资源文件单选按钮中也显示了这一点。

你不能忽略这个要求,你可以没有图标资源,但不能没有清单,尤其是不在安装程序中。将.res文件从原始可执行文件中取出将是困难的,相当肯定的是,ildasm.exe不支持反编译它。如果像Resource Hacker这样的工具不能做到这一点,那么你就需要为你的程序创建一个.res文件。或者回顾一下使用ildasm.exe来做你想做的事情的智慧。