04.03.2009

About Wix

Wix(Windows Installer XML) - набо инструментов для создания инсталляционных пакетов Windows. Изначально в состав Wix входили несколько консольных утилит:

  • candle - препроцессор/компилятор
  • light - компоновщик
  • lit - управление библиотеками
  • dark - декомпилятор
  • tallow - утилита для автогенерации кода - с 3-й версии заменена на heat.
На данный момент утилит стало больше, но эти являются основными. Исходным файлом для wix является xml-файл, написанный в соответствии с определенными правилами. Wix является разработкой Microsoft, и, по некоторым слухам, является инструментом их внутреннего использования. но пока это вызывает сомнения. Тем не менее, при установке Wix успешно интегрируется в Visual Studio, получает свою порцию типов проектов и другие студийные плюшки, включая Intellisense.Чего там катастрофически не хватает, так это редактора диалоговых форм. Но Microsoft уже обещали интеграцию Wix в студию в одном из следующих релизов, так что есть надежда, что и дизайнер форм тоже рано или поздно появится.
Так как wix предназначен для создания инсталляционных msi-пакетов, то и структура xml-файла для wix во многом определена этим. В инсталляционном пакете, и в wix соответственно, устанавливаемый продукт представляет собой иерархическую структуру.
На самом верхнем уровне располагается непосредственно сам продукт(Product), его теги обрамляют практически весь файл кода и в них можно указать основные сведения о нем - наименование, выпускающую фирму, версию, язык.
На более низком уровне детализации лежат "фичи"(Features). Features представляют собой составляющие части устанавливаемого продукта с точки зрения пользователя. Например, при установке Visual Studio можно выбирать различные компоненты для установки - инструменты разработчика, тестировщика, SQL-сервер и многое другое. Вот это и есть features. В диалоговом окне они представляются в виде дерева, соответствено сами могут организовываться в иерархические структуры.
На следующем уровне детализации находятся компоненты(Components). Компоненты невидимы для пользователя и представляют из себя атомарную единицу инсталляции. С точки зрения инсталляции компонент неделим. То есть, он конечно состоит из различных элементов, как то: файлы, ярлыки, записи реестра, SQL-запросы и др., но компонент нельзя установить частично, он либо устанавливается весь, либо не устанавливается вовсе. Если появляется необходимость устанавливать какие либо файлы в зависимости от некоторых условий, то такие файлы необходимо вынести в отдельный компонент. Также компонент должен иметь обязательно родительскую feature, ибо только features определяют какие составляющие продукта пользователь будет устанавливать, а какие нет. В свою очередь компонент содержит более мелкие элементы, описывать которые все нет смысла, основные упомянуты выше. Также обязательным элементов компонента является наличие у него родительской директории, в которую соответственно и будут установлены файлы компонента. Компонент не может быть разбит на части между несколькими директориями, он всегда ставится целиком в одну директорию.
Идентификатор продукта в масштабах Windows-вселенной обязан быть уникальным, имеет общепринятый вид GUID и может быть сгенерирован студией. Также обстоит дело и с компонентами - каждый компонент должен быть уникален. Features же GUID'a не имеют.
Такова примерная структура устанавливаемого продукта в msi-пакетах.

2 комментария:

Анонимный комментирует...

WiX интегрирован в VS2010.
Редактора форм там нет -- интеграция примерно на том же уровне что и Votive.

Александр комментирует...

Ну тем не менее это уже шаг вперед, надеюсь что они на этом не остановятся)) а пока будем пользовать сторонние утилитки...