Я пытаюсь использовать поле «Комментарий» ресурса VERSIONINFO. Целевая программа — это 64-битный EXE-файл Windows (скомпилирован с VS 2015).
Все элементы, такие как версия, авторское право, описание и т. Д., Отображаются правильно, кроме «Комментарии».
Я определяю это так же, как и другие элементы блока StringFileInfo. Что-то вроде того:
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILEVER
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
BEGIN
BLOCK "StringFileInfo"BEGIN
BLOCK "000004b0"BEGIN
VALUE "FileDescription", PROGRAM_NAME
VALUE "LegalCopyright", COPYRIGHT_NOTE
VALUE "CompanyName", "My Company\0"VALUE "FileVersion", STRFILEVER
VALUE "ProductName", STRPRODUCTNAME
VALUE "ProductVersion", STRPRODUCTVER
VALUE "InternalName", "program\0"VALUE "OriginalFilename", "program.exe\0"VALUE "Comments", "A comment to show\0"END
END
BLOCK "VarFileInfo"BEGIN
VALUE "Translation", 0x0000, 0x04b0
END
END
Когда я отображаю информацию о версии с PowerShell, вот так:
(dir *.exe).VersionInfo|fl
пустые «Комментарии» отображаются.
Я также sigcheck программы от SysInternals:
sigcheck -a .\program.exe
Он отображает:
...
Comments: n/a
...
«Н / Д»? Означает ли это, что мне нужно установить какие-то особые флаги или что-то для отображения комментариев?
Чтобы это работало, мне пришлось добавить / D _UNICODE / D UNICODE в командную строку компилятора ресурсов:
rc.exe /D _UNICODE /D UNICODE ....
С такой командной строкой — комментарии есть! Мне кажется странным, что это требуется только для комментариев, в то время как другие предопределенные поля не требуют этого. В любом случае — спасибо, ребята, за подсказку — я посмотрел, как это делает VS.
Других решений пока нет …