Могу ли я иметь версию файла Windows .exe только с тремя цифрами?

#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? Являются ли версии файлов просто строками, которые программы не должны анализировать?)