使用相同的图标.exe和窗体

本文关键字:exe 窗体 图标 | 更新日期: 2023-09-27 18:07:19

在我的WinForms应用程序中,如果我为我的应用程序设置了一个图标,为我的Form设置了一个图标,这个图标在我的可执行文件中出现两次。有可能避免这种情况吗?

这个问题以前也有人问过,但答案似乎并没有解决问题。vanmelle的答案似乎只提取了一个图标(例如,16x16), Sunlight的答案只提取了32x32, lc的答案并没有解决这个问题:在可执行文件中仍然有一个重复的图标。

如果不可能完成这个任务,为什么会这样?为什么在可执行文件和窗体中使用相同的图标在WinForms中如此困难?

使用相同的图标.exe和窗体

这是在完全非托管操作系统上运行托管代码的不可避免的结果。Windows资源管理器只知道如何读取非托管资源。你可以看到它们的样子,在Visual Studio中使用File + Open + File,然后选择你的。exe。您通常会在这里看到三个资源组:

  • RT_MANIFEST,包含通知Windows程序支持Vista的清单
  • Version,包含文件版本资源,其值派生自AssemblyInfo.cs文件。当您在资源管理器中使用属性+详细信息选项卡时,可以看到它的内容。请注意,超级重要的[AssemblyVersion]在Vista和更高版本中是不可见的
  • 图标,包含您添加的图标。

此非托管资源数据与您添加的托管资源分开。托管资源被编译到程序集清单中。非托管资源存储在映像文件的.rsrc部分中。您可以使用/win32res命令行选项覆盖自动生成的版本。它需要一个.res文件,一个由rc.exe资源编译器从.rc资源脚本生成的二进制文件。一个很老的Windows SDK工具。

这可能有一天会改变,传说超级机密的Midori项目专注于管理操作系统。现在,我们只能用胶水了。