Ресурс версии в DLL не виден при щелчке правой кнопкой мыши
Я пытаюсь сделать что-то, что очень легко сделать в обычном MSVC, но не поддерживается в VC++ Express.
В VC++ Express нет редактора ресурсов. Поэтому я добавил файл с именем version.rc в мой проект DLL. Файл имеет содержимое ниже, которое компилируется компилятором ресурсов и добавляется в конечную DLL. Этот ресурс доступен для просмотра в DLL с помощью reshacker, но не при щелчке правой кнопкой мыши на DLL в проводнике Windows.
Чего не хватает в моем файле RC, чтобы он появился при щелчке правой кнопкой мыши?
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "something Application"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "something"
VALUE "LegalCopyright", "Copyright (C) 2008 Somebody"
VALUE "OriginalFilename", "something.exe"
VALUE "ProductName", "something Application"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
3 ответа
Правильное решение - добавить в начало вашего файла.rc:
#include <windows.h>
Я смог увидеть (используя reshacker) одно различие между моим ресурсом и ресурсами, которые появляются при щелчке правой кнопкой мыши, и это было имя ресурса. Поэтому я изменил VS_VERSION_INFO на 1; и теперь ресурс виден по правому клику.
1 VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "something Application"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "something"
VALUE "LegalCopyright", "Copyright (C) 2008 Somebody"
VALUE "OriginalFilename", "something.exe"
VALUE "ProductName", "something Application"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
Попробуйте изменить ваши ресурсы на:
FILEFLAGSMASK 0x3fL
а также
BLOCK "040004e4"
а также
VALUE "Translation", 0x400, 1252
Я расширю ответ @Stefan согласно: StringFileInfo BLOCK statement
Определяет строковый информационный блок. синтаксис
БЛОК "StringFileInfo" {БЛОК "lang-charset" {VALUE "имя-строки", "значение" . . . }}
Параметры
lang-charset
Пара идентификаторов языка и набора символов. Это шестнадцатеричная строка, состоящая из конкатенации идентификаторов языка и набора символов, указанных в разделе "Примечания".
В моем случае я использовал неправильный lang-charset
и поэтому сведения о версии не отображали информацию о версии, это правильный вариант:
BLOCK "040904E4"
....
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
Здесь список кодов языков и набор символов