Да, FileVersions и ProductVersions не связаны. ProductVersion отображается в разделе «Установка и удаление программ» («Программы и компоненты») и в основном используется в сценариях «Основное обновление» для определения того, что должно произойти.
Свойство ProductVersion определено как [0-255]. [0-255]. [0-65535] (8,8,16 бит со знаком соответственно)
Версия файла определяется как [0-65535]. [0-65535]. [0-65535]. [0-65535] (16,16,16,16 бит со знаком ...)
Текст / XML / Config / BMP ectera будет нулевым. Обычно ваш инструмент разработки (например, InstallShield) будет отражать ваши версии PE-файлов (DLL, OCX, SYS, EXE ...) во время сборки и автоматически записывать их номера версий в таблицу файлов.
Существует также опция в InstallShield, которая называется «Всегда перезаписывать», когда «версия лежит» для MSI во время сборки и сообщает, что ваш не PE-файл (TXT / XML ....) действительно имеет номер версии (обычно 65535.0.0.0) это использует поведение в MSI, когда версионные файлы имеют преимущество перед версионными файлами при принятии решения о перезаписи или нет.
Технически EXE может быть не версионным, но это анти-паттерн. Не версионный файл - это любой файл, который не имеет встроенной записи ресурса версии.
Еще одна вещь, которую нужно понять, это то, что по умолчанию установщик Windows просматривает дату создания и дату изменения целевого файла при принятии решения о том, должен ли файл src перезаписывать целевой. Если CD и MD равны, это считается «девственным» (мой термин) и происходит перезапись. Если они не равны, они считаются «пользовательскими данными» и не перезаписываются, если не выполнить трюк «Всегда перезаписывать».
Еще одна вещь, которую нужно понять, это то, что эти оценки происходят на уровне ключевого файла компонента. Любые другие сопутствующие файлы в компоненте (если они не соответствуют файлу 1: 1 для каждого компонента) будут следовать направлению файла ключа.
Также следует понимать, что существует разница между AssemblyVersion и AssemblyFileVersion. Атрибут .NET AssemblyFileVersion - это то, что сопоставляется с устаревшим атрибутом FileVersion. Атрибут AssemblyVersion используется только для целей строгого именования, и MSI не заботится об этом.
Наконец, обратитесь к Google «Правила компонента установщика Windows» для получения дополнительной информации.
Пожалуйста, дайте мне знать, если это имеет смысл, и если у вас есть дополнительные вопросы. Вы на самом деле задали около дюжины вопросов в одном вопросе, чтобы я мог что-то пропустить. Также, пожалуйста, не стесняйтесь принять этот ответ.