切换到 Windows SDK 资源编译器后,VS_VERSION_INFO 未显示在 Windows 资源管理器中

Posted

技术标签:

【中文标题】切换到 Windows SDK 资源编译器后,VS_VERSION_INFO 未显示在 Windows 资源管理器中【英文标题】:VS_VERSION_INFO not showing in Windows Explorer after switching to Windows SDK Resource Compiler 【发布时间】:2022-01-11 14:46:59 【问题描述】:

我使用 RC(资源)文件来获取链接到 EXE 文件的版本信息,最近我从 Borland Resource Compiler 切换到 Windows SDK Resource Compiler,在为了能够在我的应用程序中使用多种尺寸的图标。

该图标有效,但现在当我编译我的应用程序时,资源信息似乎没有附加到 EXE 文件中。我怀疑适用于 BRCC32.EXE 的同一个 RC 文件不适用于 Windows SDK 资源编译器。

这是我的verinfo.rc 内容:

VS_VERSION_INFO VERSIONINFO
FILEVERSION             1,0,0,0
PRODUCTVERSION          1,0,0,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
        VALUE "Comments",         "Company Soft\0"
        VALUE "CompanyName",      "Company2\0"
        VALUE "FileDescription",  "Company Soft\0"
        VALUE "FileVersion",      "x.x.x.x\0"
        VALUE "InternalName",     "Company Soft\0"
        VALUE "LegalCopyright",   "Company2\0"
        VALUE "OriginalFilename", "abrev.exe\0"
        VALUE "ProductName",      "Company Soft\0"
        VALUE "ProductVersion",   "x.x.x.x\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0409,1200
    END
END

这是我的 EXE 文件在资源管理器的文件属性中的显示方式:

最后,我没有忘记在我的 Delphi 项目文件中使用 verinfo.rc 文件:

program myprogram;
$R 'verinfo.res' 'verinfo.rc'

更新 #1

如果我将资源编译器从 Windows SDK Compiler 改回 Borland Resource Compiler,则版本信息将包含在 EXE 文件中(但我不能再使用多个大小的图标):

更新 #2

使用资源编辑器Resource Hacker可以看到EXE文件中确实有版本信息资源。但我在 Windows 资源管理器中看不到这个,也无法使用像 GetFileVersionInfo 这样的 WinAPI 函数来检索它:

更新 #3

这是我发现使用相同的 RC 文件但使用不同的资源编译器时会发生的情况:

    当使用 Borland Resource Compiler 时一切正常,版本信息显示在 Windows 资源管理器中;资源黑客显示:

    当使用 Windows SDK Resource Compiler 时,版本信息仍会显示在 Resource Hacker 中但不会显示在 Windows 资源管理器中:

【问题讨论】:

您是通过 IDE 构建的吗?如果是这样,也许您的 verinfo.rc 数据会被项目选项的版本数据覆盖? @AndreasRejbrand 无论是从 IDE 还是命令行,我都遇到了同样的问题...项目选项 > 应用程序 > 版本信息中的“在项目中包含版本信息”框没有选中 如果将040904b0 更改为040904E4 会怎样? VALUE "Translation", 0x0409 0x04E4 在底部? 试过了,但 EXE 属性的详细信息仍然是空的。这很奇怪,因为这个相同的 .rc 文件一直对我有用,直到我切换了资源编译器 咳咳:“总是”=for less than 2 months。您是否使用十六进制编辑器查看了 EXE 以搜索预期的字符串? Explorer 不显示版本信息并不意味着它不在文件中。 【参考方案1】:

Version resource in DLL not visible with right-click 解决了这个问题:基本上我将.rc 文件的第一行从

VS_VERSION_INFO VERSIONINFO

1 VERSIONINFO

现在一切正常!

【讨论】:

根据the documentation,它应该始终是1 为自己解决这个问题做得很好! @AmigoJack 这很奇怪,因为如果我使用 Borland 资源编译器,它会以另一种方式工作。无论如何,谢谢你的信息 这意味着VS_VERSION_INFO 标识符没有被资源编译器定义,所以.rc 脚本需要明确地做它,例如:#ifndef VS_VERSION_INFO #define VS_VERSION_INFO 1 #endif。声明资源时,如果其 ID 不是数值,则将其按原样用作字符串名称。您可以在屏幕截图中清楚地看到这种情况。

以上是关于切换到 Windows SDK 资源编译器后,VS_VERSION_INFO 未显示在 Windows 资源管理器中的主要内容,如果未能解决你的问题,请参考以下文章

安装 microsoft platform SDK for Windows Server 2003 SP1 后在 VS 2005 中编译时出现问题

linphone-sdk windows端VS编译心得

Win7+VS2005编译Qt4.7.3+phonon(需要安装新版本Windows SDK)

windows环境下VS2013编译openSSL

VS SDK更新问题(error MSB8036: 找不到 Windows SDK 版本10.0.14393.0)

VS2015 MSB8036 8.1SDK 问题