Вы можете добавить дополнительные поля к информации о версии в вашем .rc файле.Вы не можете добавить числовые поля, но вы можете добавить локализованные строковые поля.Я никогда не пытался сделать это с помощью графического интерфейса, но я знаю, что вы можете сделать это, изменив файл напрямую.
В Visual C ++ щелкните правой кнопкой мыши свой файл .rc и нажмите «Просмотреть код».Где-то там вы найдете раздел, который начинается с:
BLOCK "StringFileInfo"
Этот блок, вероятно, имеет только один подблок:
BLOCK "0409904b0"
Это число является числовой версией локалидескриптор для en_us.Этот блок содержит несколько записей VALUE, таких как:
VALUE "FileVersion", "1, 0, 0, 0"
VALUE "OriginalFilename", "MyProjectName"
Вы можете добавить в этот раздел любое поле, которое хотите, и оно появится на вкладке версии диалогового окна свойств для исполняемого файла.
Если вам нужно иметь возможность читать эти значения во время выполнения, вы можете использовать GetFileVersionInfo следующим образом:
wchar_t myModululeName[MAX_PATH];
GetModuleFileName(NULL,myModuleName,MAX_PATH);
DWORD dummy;
DWORD versionSize=GetFileVersionInfoSize(myModuleName,&dummy);
//I don't remember why I added extra space to these
void * versionInfo=malloc(versionSize+10);
GetFileVersionInfo(myModuleName,0,versionSize+1,versionInfo);
//This part is optional
//The VS_FIXEDFILEINFO contains information from the non-localized parts of
//the "StringFileInfo" block in the .rc file
VS_FIXEDFILEINFO * fixedFileInfo;
UINT fixedFileSize;
VerQueryValue(versionInfo,L"\\",(void **)(&fixedFileInfo),&fixedFileSize);
//This will retrieve the local codes that are defined in the StringFileInfo block
WORD * translationTable;
UINT translationSize;
VerQueryValue(verionInfo,L"\\VarFileInfo\\Translation",(void **)(&translationTable),&translationTableSize);
//This always uses the first locale, you could examine translationTable
//if you need to for other codes
wchar_t mySpecialQuery[128];
sprintf_s(mySpecialQuery,L"\\StringFileInfo\\%04x%04x\\MySpecialVersionInfo",translationTable[0],translationTable[1]);
wchar_t * mySpecialValue;
UINT mySpecialValueSize;
VerQueryValue(versionInfo,mySpecialQuery,(void **)(&mySpecialValue),&mySpecialValueSize);
//you can now do whatever you need to do with mySpecialValue, including using _wtoi()
//and query for more values
free(versionInfo);