номера версий MSI - PullRequest
       4

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

12 голосов
/ 16 февраля 2012

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

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

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

Версия

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

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

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

Ответы [ 2 ]

23 голосов
/ 16 февраля 2012

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

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

0 голосов
/ 20 сентября 2018

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

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

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

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

Версия

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

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

  • Установщик Windows: string свойство (как таковое его можно найти 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 (без знака16bit.16bit.16bit.16bit) и
  2. Ограничения установщика Windows для версии продукта (без знака 8bit.8bit.16bit), в то время как четвертое поле не имеет значения :

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


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...