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

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

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

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

Версия

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

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

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

Ответ 1

Да, 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, когда файлы Versioned Files Trump Non-Versioned при принятии решения о перезаписи или нет.

Обычно EXE может быть не версией, а анти-шаблоном. Неверсифицированный файл - это любой файл, который не имеет записи ресурса встроенной версии.

Другое дело, что по умолчанию установщик Windows просматривает дату создания и дату изменения целевого файла при принятии решения о том, должен ли файл src перезаписывать цель. Если CD и MD re равны, он считается "девственником" (мой термин) и происходит переписывание. Если они не равны, это считается "пользовательскими данными", и оно не перезаписывается, если вы не выполняете трюк Always Overwrite.

Еще одна вещь, которую нужно понять, - это оценки на уровне ключевого файла компонента. Любые другие сопутствующие файлы в компоненте (если не следующие 1:1 файл для каждого руководства по компонентам) будут следовать за dirction файла ключа.

Также осознайте разницу между AssemblyVersion и AssemblyFileVersion. Атрибут .NET AssemblyFileVersion - это то, что сопоставляется с устаревшим атрибутом FileVersion. Атрибут AssemblyVersion используется только для целей Strong Naming, и MSI не заботится об этом.

Наконец, google "Правила компонентов установщика Windows" для получения дополнительной информации.

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

Ответ 2

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

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

Термины версии в контексте

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

Версия

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

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

  • Установщик Windows: строковое свойство (как таковое оно может быть найдено Orca/SuperOrca в файле MSI)
  • Файлы ресурсов: PRODUCTVERSION, оператор, использующий тип данных version
  • Сборка .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)

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