如何在MS VS 2022的C++ RC文件中设置Comments、PrivateBuild、SpecialBuild属性?
在VS 2022的C++ RC文件中正确设置Comments、PrivateBuild和SpecialBuild属性
你的RC文件存在两处关键错误,导致这三个属性无法在生成的EXE属性中正常显示:
错误1:FILEFLAGS使用了错误的宏前缀
在_DEBUG分支中,你误用了VER_FF_PRIVATEBUILD和VER_FF_SPECIALBUILD,但VS_VERSION_INFO的FILEFLAGS字段需要使用VS_FF_开头的宏定义(对应verrsrc.h中的标准定义),VER前缀的宏属于旧版兼容定义,无法正确触发属性显示。
错误2:FILEFLAGSMASK重复定义了VS_FF_PATCHED
虽然不影响功能,但冗余定义会导致代码混乱,建议清理重复项。
修正后的完整RC代码片段
// magic numbers are defined in // C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\verrsrc.h // Microsoft Visual C++ generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS #include "afxres.h" #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.K.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED 1 TEXTINCLUDE BEGIN "resource.h\0" END 2 TEXTINCLUDE BEGIN "#include \"afxres.h\"\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED VS_VERSION_INFO VERSIONINFO FILEVERSION 1.2.3.4 PRODUCTVERSION 1.2.3.5 // FILEFLAGSMASK 0x17L // VS_FF_DEBUG | VS_FF_PRERELEASE | VS_FF_PATCHED // 修正:移除重复的VS_FF_PATCHED FILEFLAGSMASK VS_FF_DEBUG | VS_FF_PRERELEASE | VS_FF_PATCHED | VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD #ifdef _DEBUG // 修正:将VER_FF_前缀改为VS_FF_ FILEFLAGS ( VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD ) #else FILEFLAGS ( VS_FF_DEBUG | VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD ) #endif FILEOS VOS__WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "080904b0" BEGIN VALUE "PrivateBuild", "Fooey" VALUE "SpecialBuild", "Barrey" VALUE "Comments", "Timey-wimey" VALUE "CompanyName", "Acme Inc" VALUE "LegalTrademarks", "No liability for product failure accepted" VALUE "FileDescription", "Roadrunner Catcher(TM)" VALUE "FileVersion", "0.1.2.3" VALUE "InternalName", "catcher.exe" VALUE "LegalCopyright", "Copyright (C) Acme Inc" VALUE "OriginalFilename", "Catcher-build.exe" VALUE "ProductName", "Catcher" VALUE "ProductVersion", "4.3.2.1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x809, 1200 END END #endif // not APSTUDIO_INVOKED
额外注意事项
- PrivateBuild和SpecialBuild的内容仅当FILEFLAGS中对应设置了
VS_FF_PRIVATEBUILD和VS_FF_SPECIALBUILD时,才会在EXE的属性窗口中显示。 - StringFileInfo中的代码页块
080904b0与VarFileInfo中的Translation字段(0x809对应英文英国,1200对应UTF-16LE)保持一致,这部分你的设置是正确的,无需修改。 - 修改后需清理项目的中间文件(如.obj、.res),然后重新编译生成EXE,确保新的资源生效。
内容的提问来源于stack exchange,提问作者CSM
相关产品推荐
相关产品推荐

