Загальні питання
Що таке WiX?
Windows Installer XML (WiX) - це набір інструментів з відкритим вихідним кодом, що дозволяють збирати з XML-описів пакети формату Windows Installer.
WiX - перший продуктом компанії Microsoft, який став розвиватися на майданчику SourceForge і поширюватися під відкритою ліцензією CPL (двома іншими пізніше стали Windows Template Library і FlexWiki).
До складу WiX входить ряд консольних утиліт:
- candle - препроцесор / компілятор
- light - компоновщик
- lit - управління бібліотеками
- dark - декомпілятор
- tallow - утиліта для автогенерации коду
Де ще можна знайти інформацію по WiX?
Чому б замість WiX не використовувати ...?
Звідки можна завантажити останню версію WiX?
Релізи WiX розміщені на SourceForge: WiX 2.0 + Votive2. WiX 3.0 + Votive 3. Крім того, розробники WiX дотримуються практики щотижневих релізів.
Можна мені взяти участь в розробці?
ТАК! Вам потрібно лише підписати угоду. після чого ви можете вносити поліпшення і відсилати правки на [email protected].
Як встановити WiX?
Перш за все, встановіть .NET Framework 1.1 і SP1 для нього. Інструменти WiX працюють під .NET, а без SP1 ви можете зіткнутися з випадковими помилками при парсінгу великих XML-файлів. NET Framework потрібно тільки для роботи утиліт WiX; готовий інсталяційний пакет не вимагає прісутстувія .NET на цільовій машині.
При установці, WiX не вимагає особливих налаштувань - досить розгорнути .zip-архів в яку-небудь папку.
Для того, щоб при редагуванні .wix-файлів в Visual Studio працював IntelliSense, потрібно помістити XML-схеми WiX (wix.xsd, wixloc.xsd) в відповідну папку:
Як працювати з проектом WiX безпосередньо в Visual Studio?
Саме для цього і був розроблений Votive.
Votive - це розширення (Add-In) для Visual Studio. Він дозволяє створювати «WiX-проекти», які можна включати в solution і які діють точно так же, як і будь-які інші типи проектів. Всі інструменти WiX включені до складу Votive, тому для роботи з ним не потрібно встановлювати WiX окремо - це може знадобитися вже тільки для автоматичного складання установника.
Чи є простий спосіб намалювати інтерфейс (UI) установника?
Існує ряд проектів, які надають можливість WYSIWYG-редагування екранів установника:
Як мені отримати нове значення GUID?
Значення GUID використовуються WiX в якості ідентифікаторів різних об'єктів, таких як продукт (Product) або компонент (Component), і WiX передбачає, що ви самі виберете потрібні значення і вкажіть їх в XML-файлі. Для генерації значень ви можете використовувати утиліти, такі як uuidgen або guidgen (з VS - команда Tools | Create GUID), але переконайтеся, що використовується верхній регістр символів і значення не оточений фігурними дужками.
При роботі в Visual Studio можна використовувати простий макрос. на який можна призначити комбінацію клавіш, або використовувати GUIDGen.NET.
Як змінити іконку продукту, яку видно в списку «Установка і видалення програм»?
Вкажіть у властивості ARPPRODUCTICON ідентифікатор потрібної іконки. наприклад:
Як автоматично додати в інсталятор всі файли з заданої папки?
За ідеєю, такої можливості немає.
Утиліта tallow дозволяє просканувати директорію і згенерувати компоненти для всіх знайдених файлів, але отриманий в результаті вихідний код передбачається використовувати тільки в якості початкового варіанту для подальшої ручного доведення, але не в якості входу для процесу автоматичного складання - все що підходить для автоматичного складання має передаватися в candle, але ніяк не в tallow.
Існує інструмент mallow. дозволяє автоматично збирати список файлів в директорії і піддиректоріях, і генерує також компоненти і теги Directory, що дозволяє підключати отриманий файл так, що все поддерево директорій і файли будуть включені в пакет установки і встановлені у вигляді такого ж поддерева в задану папку.
Як зареєструвати COM DLL?
Рекомендований спосіб полягає в тому, щоб зібрати всю реєстраційну інформацію і включити її в компонент (тег Component) для цієї DLL в вигляді тегів TypeLib, Class, Interface, ProgID ітд. і, як останній засіб - тег Registry. В якості початкового матеріалу ви можете використовувати результат роботи утиліти tallow (або поліпшеною tallow. Або wixtlib для бібліотек типів). наприклад:
Якщо для DLL потрібно само-реєстрація, вкажіть в тезі File атрибут SelfRegCost:
Але майте на увазі, що використання саморегистрации вкрай неодобряемого. оскільки вона підриває можливість Windows Installer управляти установкою реєстраційної інформації.
Як встановити .NET-збірку в GAC?
Встановіть для тега File атрибути Assembly і AssemblyManifest, але не вказуйте атрибут AssemblyApplication. наприклад:
Така збірка не буде встановлено до фази «commit», тому до цього її неможливо буде використовувати в custom actions.
Якщо ви передумаєте і вирішите не включати складання в GAC, встановіть атрибут AssemblyApplication в той же значення що і атрибут AssemblyManifest.
Як перевірити, чи встановлені необхідні системні компоненти (prerequisites)?
Основна ідея полягає в тому щоб перевіряти властивість, яке встановлюється по-різному в залежності від наявності компонента і його версії. Ви можете створити умова запуску установки, помістивши тег Condition всередині Product, наприклад:
Для перевірки версії ОС ви можете використовувати зумовлені властивості - такі як VersionNT або Version9X, для перевірки версії .NET Framework - MsiNetAssemblySupport.
Для пошуку компонента, встановленого з MSI, можна використовувати пошук по GUID тегом ComponentSearch. Для компонента Windows, такого як IIS, може знадобитися пошук по реєстру, наприклад:
До установки .MSI-пакета потрібно автоматично встановити <системный компонент …>. Як це зробити?
Проблема встановлення та оновлення системних компонентів (prerequisites), таких як .NET Framework, MDAC, MSDE і ін. Вирішується використанням програми-bootstrapper, завдання якої - встановити і оновити всі потрібні компоненти, після чого запустити на виконання ваш .MSI-пакет.
Існує кілька таких програм:
Коли слід змінювати код продукту, код пакета ітд.?
Є три важливих GUID, які визначають ваш інсталяційний пакет, і які особливо важливі для оновлень продукту:
- код пакета (Package Code) зазвичай має побут своїм для кожного .msi-файлу
- код продукту (Product Code) ідентифікує групу пакетів, з яких тільки один може бути встановлений в кожен момент часу. Наприклад, два пакети можуть мати один і той же код продукту, якщо вони є локалізаціями на різні мови. Якщо ви хочете надати користувачам оновлюватися з однієї версії на іншу без обов'язкової деінсталяції (т.зв. major upgrade), то кожна версія повинна мати власний код продукту, тому зазвичай новий випуск з новим номером версії служить підставою для зміни коду продукту.
- код оновлення (Upgrade Code) ідентифікує групу пакетів, всі з яких можуть бути оновлені до одного нового продукту. Зазвичай, код поновлення збігається для всіх версій, які не можуть бути встановлені одночасно (side-by-side), тим самим дозволяючи попередніх його версій визначати наявність новіших і відмовлятися від установки при цьому, а також нових версій визначати наявність старіших і автоматично оновлювати їх.
Як я можу розширити функціональність WiX?
локалізація
Як отримати .MSI-пакет російською мовою?
Під керівництвом Gabor DEAK JAHN існує т.зв. WiX Localization Project. який об'єднує зусилля з написання файлів локалізації (.wxl-файлів) для всіх основних мов. У дистрибутив останніх версій WiX входить 4 мовних файлу (для en-US, de-DE, es-ES і nl-NL), хоча ще 9 мовних файлів (в т.ч. і ru-RU) числяться в списку як завершення.
За основу локалізації береться файл WixUI_en-us.wxl, основна частина повідомлень відноситься до Windows Installer, їх переклад грунтується на файлі Intl.zip з MSI SDK. Переклад інших повідомлень виконується безпосередньо з англомовного файлу.
«Неофіційний» файл локалізації WixUI_ru-ru.wxl можна взяти тут.
Російське ім'я продукту відображається як.
По-перше, перевірте що кодування файлу збігається з кодуванням, оголошеної на початку цього файлу, наприклад: