通过ilasm更改可执行图标

我有一个带有嵌入式.resx文件的安装程序应用程序,其中包含一些信息,如服务器名称,端口,密码等…我必须为每个客户生成此安装程序( 此过程是自动化的,并通过我们的网站完成 )。 这工作正常我使用ildasm反汇编并替换resx文件,然后我再次使用ilasm来生成.exe。 但是在这个过程之后,.exe丢失了我们的图标,将默认的图标放在它的位置。

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

谢谢

您错过了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:]属性自动生成的。

  • “图标”包含程序的图标资源。 你不再拥有的那个。

您需要使用ilasm.exe的/ resource选项将这些非托管资源嵌入到已修补的可执行文件中。 这需要一个.res文件,即由rc.exe Windows SDK工具生成的非托管资源的编译版本。 请注意如何在Project + Properties,Application选项卡,Resource file单选按钮中公开它。

你不能忽视这个要求,你可以没有Icon资源而不是清单, 特别是在安装程序中没有。 从原始可执行文件中获取.res文件将很困难,相当确定ildasm.exe不支持反编译它。 如果像Resource Hacker这样的工具没有这样做,那么你需要为你的程序创建一个.res文件 。 或者回顾一下使用ildasm.exe做你想做的事情的智慧。