#windows #version
Вопрос:
Я хотел бы иметь возможность использовать трехзначную схему управления версиями для своего приложения; однако, когда я задаю только три цифры как для версии файла, так и для версии продукта в своем файле .rc (как строковая, так и числовая версии), Windows отображает версию файла как «1.0.0.0» вместо «1.0.0», как я предполагал. Что я здесь делаю не так?
Соответствующая часть моего файла .rc является:
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH
PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Acme Inc."
VALUE "FileDescription", "My App"
VALUE "FileVersion", VERSION_STR
VALUE "InternalName", "My App.exe"
VALUE "LegalCopyright", "Copyright © 2021 Acme Inc."
VALUE "OriginalFilename", "My App.exe"
VALUE "ProductName", "My App"
VALUE "ProductVersion", VERSION_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
где VERSION_MAJOR
, VERSION_MINOR
, VERSION_PATCH
, и VERSION_STR
являются #define
s из заголовка, который автоматически генерируется CMake.
Комментарии:
1.
FILEVERSION
иPRODUCTVERSION
являются четырьмя 16-разрядными целыми числами.2. Это просто фиксированное требование, которое невозможно обойти?
3. Это часть формата файла.
4. Хорошо, я думаю, мне просто нужно будет поставить дополнительный ноль в конце строки версии файла. Прискорбно, но так оно и есть. Вот почему я просто использую Linux для своего ежедневного драйвера 🙂
5. Технически, вы заполняете два 32-разрядных целых числа. По соглашению значения интерпретируются как четыре 16-разрядных целых числа. Не существует соглашения для указания альтернативного представления. (Вы могли бы попробовать придумать его и посмотреть, наберете ли вы подписчиков.) Вы можете создать пользовательскую строку «FileVersion», в которой будет написано все, что вам нравится. Код, который отображает строку, покажет вашу пользовательскую строку. (Каким был бы способ сделать это в Linux? Являются ли версии файлов просто строками, которые программы не должны анализировать?)