Windows如何解释多个VersionInfo资源?

我目前正在研究Windows版本信息资源。 在VS_VERSION_INFO资源中可以有多个VS_VERSIONINFO/VS_FIXEDFILEINFO结构是令人困惑的。

据我所知,你可以有多个RT_VERSION->VS_VERSION_INFO资源与不同的语言ID。 (就像图中所示)

语言标识

这两个语言ID( 0 and 1031 )实际上有两个不同的VS_VERSIONINFO/VS_FIXEDFILEINFO

0是一个中性语言,似乎比你的实际本地语言ID(这是1031 )优先。

对我来说,这似乎是一个混乱和混乱。 在VS_VERSION_INFO资源中有多个VS_VERSIONINFO结构怎么可能有什么意义? Windows如何解释多个资源,结构? 而当你调用GetFileVersionInfo时,怎么可能只获得一块缓冲区呢?

这一切对我来说都没有什么意义,我也找不到太多的文档。

  1. 您必须在文本信息和裸VS_FIXEDFILEINFO块之间做出区别。 第一块只存在一次。 文本信息是依赖于语言的。
  2. “Windows”不喜欢一个特定的;)探险家做的是另一回事。 它只是显示资源信息。 但实际上这只是字符串信息而不是来自固定版本信息的信息。
  3. 当你打电话给GetFileVersionInfo你得到所有的语言块! VerQueryValue用于访问他单独的块。
  4. Windows中的安装程序和其他例程只使用VS_FIXEDFILEINFO块。 他们不关心任何文本块。 而这个块只存在一次。

我假定资源管理器只显示第一个文本块,也不喜欢特定的一个。 只需使用文本编辑器并在资源文件中交换块。 但也许资源编译器重新排序它们。

要访问单独的部分: – VerQueryValue与“\”给你固定的版本信息块VS_FIXEDFILEINFO – VerQueryValue与“\ VarFileInfo \翻译”给你一个翻译列表 – “\ StringFileInfo \ langId_charset \键名”你得到特定的字符串部分

您可以在MSDN中找到这些信息