Номера версий 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 во время процесса сборки / развертывания
разработчики должны учитывать:
- Ограничения
VERSIONINFO
/AssemblyName.Version
(без знака 16 бит 16 бит 16 бит 16 бит) и - Ограничения установщика 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)
Пожалуйста, укажите на недостатки / недостатки этих сравнений.