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

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

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

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

"Версия

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

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

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

Ответы на вопрос(2)

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

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

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

Версия

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

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

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

Версия файла

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

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

В MSI отсутствует свойство «FileVersion».

Файлы ресурсов:FILEVERSION, оператор с использованием типа данных версииСборка .NET:AssemblyFileVersionAttributeОграничения номера версии

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

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

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

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

Так в случае:

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

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

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

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

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

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

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

Решение Вопроса

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

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

 Christopher Painter16 февр. 2012 г., 23:26
Нет, это будет слишком дорого во время установки из-за сжатия файлов в CAB-файлах и CAB-файлов, хранящихся в потоках. Предполагается, что то, что написано в таблице файлов, является правильным.
 Christopher Painter16 февр. 2012 г., 16:04
Это совершенно другая группа червей, связанных с автоматизацией сборки и непрерывной интеграцией, которая отвечает за создание приложения и установщика приложений. Вы захотите, чтобы этот процесс создал версию файлов приложения и передал свойство версии продукта в сборку установщика. Есть много в зависимости от того, как выглядит ваша среда сборки. Лично я использую Team Foundation Server Team Build вместе сtfsversioning.codeplex.com Вы можете использовать InstallShield или Wise или VB6, Deplhi, PowerBuilder, C #, Java для всех, что я знаю, поэтому конкретного ответа нет.
 Mike D16 февр. 2012 г., 23:10
Проверяет ли MSIEXEC, что версия в файле .exe совпадает с версией в таблице файлов?
 elmarco12 нояб. 2013 г., 18:03
очень полезный ответ, многое проясняет. Спасибо
 Mike D16 февр. 2012 г., 16:01
Спасибо, это помогает. Есть ли какие-либо средства в визуальной студии или дополнения для автоматического увеличения FILEVERSION? Имеет ли PRODUCTVERSION какое-либо значение в VS_VERSION_INFO. Версии 12.2.16 и 12.02.16 идентичны?

Ваш ответ на вопрос