2012-02-16 3 views
9

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

Является ли это одним из этих неправильных? Являются ли эти две «версии» совершенно несвязанными или что?

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

«Версия

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

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

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

ответ

20

Да, 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 под названием «Always Overwrite», что «версия лежит» для MSI во время сборки и сообщает, что у вашего файла, отличного от PE (TXT/XML ....), действительно есть номер версии (обычно 65535.0.0.0), это приводит к поведению в MSI, когда файлы Versioned Files Trump Non-Versioned при принятии решения о перезаписи или нет.

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

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

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

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

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

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

+0

Спасибо, что помогает. Есть ли какое-либо средство в визуальной студии или аддоне для автоматического устранения FILEVERSION? Имеет ли значение PRODUCTVERSION какое-либо значение в VS_VERSION_INFO. Являются ли версии 12.2.16 и 12.02.16 одинаковыми? –

+2

Это совершенно другая возможность червей, связанных с автоматизацией сборки и непрерывной интеграцией, которая отвечает за создание приложения и установщика приложений. Вы захотите, чтобы этот процесс обновил ваши файлы приложений и передал свойство версии продукта в сборку установщика. В зависимости от того, как выглядит ваша среда сборки, есть много. Лично я использую Team Team Server Team Build вместе с http://tfsversioning.codeplex.com/. Вы можете использовать InstallShield или Wise или VB6, Deplhi, PowerBuilder, C#, Java для всех, которых я знаю, поэтому нет конкретного ответа. –

+0

Действительно ли MSIEXEC проверяет, соответствует ли версия файла .exe таковой в таблице файлов? –

Смежные вопросы