我有一个带有嵌入式.resx文件的安装程序应用程序,其中包含一些信息,如服务器名称,端口,密码等... 我必须为每个客户生成此安装程序(此过程是自动化的,并通过我们的网站完成)。这工作正常 我对反汇编程序使用 ildasm 并替换resx文件,然后我再次使用 ilasm 来生成.exe文件。 但是在这个过程之后,.exe丢失了我们的图标,将默认的图标放在它的位置。
我找不到更改默认图标的方法。
由于
答案 0 :(得分:4)
您错过了C#程序中相当模糊的细节。编译器生成的可执行文件还包含非托管资源。必需,因为Windows对托管资源一无所知。这是您可以使用Visual Studio看到的内容。使用File + Open + File并选择C#编译器生成的.exe。需要RTM版本,它不适用于Express。
您的程序至少会看到3个节点:
RT_MANIFEST包含可执行文件的清单。 非常在以后的Windows版本中非常重要,它声明该程序与UAC兼容。它阻止Windows将您的程序视为早期的Windows程序,当它执行UAC verboten 之类的操作时,例如尝试将文件写入受保护的目录并尝试在HKLM中创建注册表项时。清单的内容是大多数程序中的默认内容,您可以使用“应用程序清单文件”项目项模板获取自定义内容。
“Version”包含可执行文件的版本资源。它包含使用Windows资源管理器查看可执行文件属性时看到的信息。其内容是从AssemblyInfo.cs源代码文件中的[assembly:]属性自动生成的。
“图标”包含程序的图标资源。你不再拥有的那个。
您需要使用ilasm.exe的/ resource选项将这些非托管资源嵌入到已修补的可执行文件中。这需要一个.res文件,即由rc.exe Windows SDK工具生成的非托管资源的编译版本。请注意如何在Project + Properties,Application选项卡,Resource file单选按钮中公开它。
你不能忽视这个要求,你可以没有Icon资源而不是清单,尤其是不在安装程序中。从原始可执行文件中获取.res文件将很困难,相当确定ildasm.exe不支持反编译它。如果像Resource Hacker这样的工具没有这样做,那么你的程序需要create a .res file。或者回顾一下使用ildasm.exe做你想做的事情的智慧。