gpt4 book ai didi

c# - 通过 ilasm 更改可执行图标

转载 作者:行者123 更新时间:2023-11-30 20:56:58 25 4
gpt4 key购买 nike

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

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

谢谢

最佳答案

您在 C# 程序中遗漏了一个相当晦涩的细节。编译器生成的可执行文件还包含非托管 资源。必需,因为 Windows 对托管资源一无所知。这是您可以在 Visual Studio 中看到的内容。使用 File + Open + File 并选择由 C# 编译器生成的 .exe。需要 RTM 版本,它不适用于 Express。

您的程序至少会看到 3 个节点:

  • RT_MANIFEST 包含可执行文件的 list 。 非常在以后的 Windows 版本中很重要,它声明程序与 UAC 兼容。它可以防止 Windows 将您的程序视为早期的 Windows 程序,当它执行 UAC verboten 尝试将文件写入 protected 目录并尝试在 HKLM 中创建注册表项时,需要对其撒谎。 list 内容在大多数程序中都是默认内容,您可以使用“应用程序 list 文件”项目项模板获取自定义内容。

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

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

您需要使用 ilasm.exe 的/resource 选项将那些非托管资源嵌入到已打补丁的可执行文件中。这需要一个 .res 文件,即非托管资源的编译版本,由 rc.exe Windows SDK 工具生成。请注意,这也是如何在“项目 + 属性”、“应用程序”选项卡、“资源文件”单选按钮中公开的。

您不能忽略此要求,您可以在没有图标资源但没有 list 的情况下生活,尤其是不在安装程序中。从原始可执行文件中获取 .res 文件将很困难,可以肯定的是 ildasm.exe 不支持反编译它。如果像 Resource Hacker 这样的工具不能做到这一点,那么您将需要 create a .res file为您的程序。或者回顾一下使用 ildasm.exe 做你想做的事的智慧。

关于c# - 通过 ilasm 更改可执行图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17212840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com