Номера версий MSI

Я действительно смущен номерами версий MSI. Здесь номер версии, используемый для ProductVersion в таблице свойств и в таблице обновлений, ограничен наличием основной и вспомогательной частей 256 или менее. Здесь номер версии, используемый в таблице файлов, может иметь большую и меньшую части 65536 или меньше.

Один из них не так? Эти две "версии" совершенно не связаны или как?

Кроме того, я не понимаю, что означает следующее, найденное в описании таблицы файлов Таблица файлов.

"Версия

Это поле является строкой версии для версионного файла. Это поле пустое для не версионных файлов. Версия файла, введенная в это поле, должна совпадать с версией файла, включенного в установочный пакет."

Как определяется "версия файла, включенного в установочный пакет"? Это, например, значение FILEVERSION в ресурсе Visual Studio VS_VERSION_INFO? Что бы это значило для файла, созданного с помощью NotePad или Word?

А что именно является "не версионным" файлом? Один с FILEVERSION = 0.0.0.0 в ресурсе VS_VERSION_INFO? Или что-то другое? Все ли файлы.exe считаются версионными?

2 ответа

Решение

Да, 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" для получения дополнительной информации.

Пожалуйста, дайте мне знать, если это имеет смысл, и если у вас есть дополнительные вопросы. Вы на самом деле задали около дюжины вопросов в одном вопросе, чтобы я мог что-то пропустить Также, пожалуйста, не стесняйтесь принять этот ответ.

Да, MSI ProductVersion и версия в таблице файлов MSI не связаны.

Да, FILEVERSION в VERSIONINFO может использоваться для установки версии в таблице файлов MSI.

Версии терминов в контексте

При работе с версией MSI номера часто извлекаются из VERSIONINFO ресурс (используется в файлах ресурсов) или контексты сборки.NET. Термины MSI могут быть проще для понимания по сравнению с такими:

Версия

  • Установщик Windows: строковый тип данных, используемый в таблице файлов MSI для файлов, которые он содержит
  • Файлы ресурсов: тип данных, состоящий из 2x32-битных целых
  • Сборка.NET: AssemblyName.Version может быть сопоставимым

Версия продукта

  • Установщик Windows: строковое свойство (как таковое оно может быть найдено Orca / SuperOrca в файле MSI)
  • Файлы ресурсов: PRODUCTVERSION, оператор, использующий тип данных версии
  • Сборка.NET: AssemblyVersion, с помощью AssemblyName.Version

Версия файла

  • Установщик Windows: не является ни свойством, ни типом данных. Используется как термин для объединения строки версии и строки языка. Методы установки Windows Installer.FileVersion и MsiGetFileVersion...

    [..] возвращает строку версии или строку языка

    В MSI отсутствует свойство "FileVersion".

  • Файлы ресурсов: FILEVERSION, оператор, использующий тип данных версии
  • Сборка.NET: AssemblyFileVersionAttribute

Ограничения номера версии

Тип данных версии в установщике Windows, несмотря на то, что он является строкой, имеет те же ограничения, что и тип данных версии в файлах ресурсов...

Версия состоит из двух 32-разрядных целых чисел, определяемых четырьмя 16-разрядными целыми числами.

... так же хорошо как AssemblyName.Version...

Метаданные ограничивают основные, второстепенные компоненты, компоненты сборки и редакции для сборки максимальным значением UInt16.MaxValue - 1

Так в случае:

  • программа построена с использованием файла ресурсов
  • PRODUCTVERSION или же AssemblyVersion используются для свойства MSI ProductVersion во время процесса сборки / развертывания

разработчики должны учитывать:

  1. Ограничения VERSIONINFO / AssemblyName.Version (без знака 16 бит 16 бит 16 бит 16 бит) и
  2. Ограничения установщика Windows для версии продукта (без знака 8bit.8bit.16bit), в то время как четвертое поле не имеет значения:

    Если вы включите четвертое поле в версию своего продукта, программа установки игнорирует четвертое поле.


Поэтому программы, используемые в процессах развертывания, использующих номер версии программ для своей установки MSI, должны учитывать следующие ограничения:

  • PRODUCTVERSION/ AssemblyVersion: 8bit.8bit.16bit-1.16bit-1 (без знака int)
  • FILEVERSION / AssemblyFileVersion: 16 бит-1.16 бит-1.16 бит-1.16 бит-1 (без знака int)

Пожалуйста, укажите на недостатки / недостатки этих сравнений.

Другие вопросы по тегам