0

我使用 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 文件在资源管理器的文件属性中的显示方式: 资源管理器文件属性显示没有 EXE 版本信息

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

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

更新#1

如果我将资源编译器从Windows SDK 编译器更改回Borland 资源编译器,则版本信息将包含在 EXE 文件中(但我不能再使用多个大小的图标了): Delphi 项目设置:资源编译器 根据需要显示 EXE 版本信息的资源管理器文件属性

更新#2

使用资源编辑器Resource Hacker我可以看到EXE文件中确实有版本信息资源。但我在 Windows 资源管理器中看不到这一点,也无法使用 WinAPI 函数(如GetFileVersionInfo )检索它: Resource Hacker 显示 VS_VERSION_INFO 资源

更新#3

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

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

    资源黑客显示资源

  2. 使用Windows SDK Resource Compiler时,版本信息仍显示在 Resource Hacker 中,但不在Windows Explorer 中:

    资源黑客显示资源

4

1 回答 1

3

右键单击不可见 DLL 中的版本资源修复了问题:基本上我将.rc文件的第一行从

VS_VERSION_INFO VERSIONINFO

1 VERSIONINFO

现在一切正常!

于 2021-12-06T13:15:22.910 回答