我有一个安装程序应用程序,其中嵌入了 .resx 文件,其中包含一些信息,例如服务器名称、端口、密码等...
我必须生成这个安装程序(这个过程是自动化的,并通过我们的网站完成)对于每个客户。这工作正常
我用ildasm用于反汇编程序并替换 resx 文件,然后我使用ilasm再次制作.exe。
但在此过程之后,.exe 丢失了我们的图标,取而代之的是默认图标。
我找不到更改默认图标的方法。
Thanks
您错过了 C# 程序中一个相当晦涩的细节。编译器生成的可执行文件还包含不受管理的资源。必需的,因为 Windows 不了解有关托管资源的任何信息。您可以使用 Visual Studio 看到这一点。使用“文件”+“打开”+“文件”并选择由 C# 编译器生成的 .exe。需要 RTM 版本,它不适用于 Express。
您将看到您的程序至少有 3 个节点:
RT_MANIFEST 包含可执行文件的清单。Very对于以后的 Windows 版本很重要,它声明该程序与 UAC 兼容。它可以防止 Windows 将您的程序视为早期的 Windows 程序(在执行 UAC 时需要对其进行欺骗)verboten例如尝试将文件写入受保护的目录以及尝试在 HKLM 中创建注册表项等。清单的内容是大多数程序中的默认内容,您可以使用“应用程序清单文件”项目项模板获取自定义清单。
“版本”包含可执行文件的版本资源。它包含您使用 Windows 资源管理器查看可执行文件的属性时看到的信息。其内容是根据 AssemblyInfo.cs 源代码文件中的 [assemble:] 属性自动生成的。
“图标”包含您的程序的图标资源。那个你已经不再拥有的人了。
您需要使用 ilasm.exe 的 /resource 选项将这些非托管资源嵌入到已修补的可执行文件中。这需要一个 .res 文件,即非托管资源的编译版本,由 rc.exe Windows SDK 工具生成。请注意,这也是如何在“项目 + 属性”、“应用程序”选项卡、“资源文件”单选按钮中公开的。
你不能忽视这个要求,你可以没有图标资源,但不能没有清单,尤其不在安装程序中。从原始可执行文件中获取 .res 文件将会很困难,相当肯定 ildasm.exe 不支持反编译它。如果像 Resource Hacker 这样的工具不能做到这一点,那么您需要创建一个 .res 文件 https://stackoverflow.com/a/8914810/17034为您的程序。或者回顾一下使用 ildasm.exe 来做您想做的事情的智慧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)