Windows 如何解释多个 VersionInfo 资源?

Ben*_*iss 5 windows versioning winapi version embedded-resource

我目前正在研究适用于 Windows 的 VersionInfo Resource(s)。VS_VERSIONINFO/VS_FIXEDFILEINFO一个VS_VERSION_INFO资源中可以有多个结构,这有点令人困惑。

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

语言ID

这 2 个语言 ID ( 0 and 1031) 实际上VS_VERSIONINFO/VS_FIXEDFILEINFO每个都有 2 个不同。

0是一种中性语言,似乎优先于您的实际本地语言 ID(即1031)。

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

这一切对我来说毫无意义,我找不到太多关于它的文档。

xMR*_*MRi 4

  1. 您必须区分文本信息和裸 VS_FIXEDFILEINFO 块。第一个块仅存在一次。文本信息取决于语言。
  2. “Windows”不喜欢特定的一个;)资源管理器所做的是另一回事。它只是显示资源信息。但实际上这只是字符串信息,而不是来自固定版本信息的信息。
  3. 当您调用 GetFileVersionInfo 时,您将获得所有语言块!VerQueryValue 用于访问单独的块。
  4. Windows 内的安装程序和其他例程仅使用 VS_FIXEDFILEINFO 块。他们不关心任何文本块。并且这个块只存在一次。

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

要访问单独的部分: - VerQueryValue 带有“\”为您提供固定版本信息块 VS_FIXEDFILEINFO - VerQueryValue 带有“\VarFileInfo\Translation”为您提供翻译列表 - 带有“\StringFileInfo\langId_charset\keyname”您可以获得特定字符串部分

您可以在MSDN中找到此信息