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