Windows Installer
Тип | програмне забезпечення Windows[d] і Інсталятор |
---|---|
Розробник | Microsoft |
Версії | 5.0 |
Платформа | Windows |
Ліцензія | безкоштовне програмне забезпечення |
Вебсайт | docs.microsoft.com/en-us/windows/win32/msi/windows-installer-portal |
Windows Installer (встановлювач для Windows, кодова назва — Darwin[2]) — підсистема Microsoft Windows, що забезпечує встановлення програм (інсталятор). Є компонентом Windows, починаючи від Windows 2000; може довстановлюватися й на раніші версії Windows. Вся необхідна для встановлення інформація (іноді й разом зі встановлюваними файлами) міститься у встановлювальних пакунках (installation packages), що мають розширення .msi[3].
Windows Installer, розроблений у 1995—1998 роках, мав спочатку кодову назву Darwin. Ранні версії називалися Microsoft Installer, звідси й стандартне розширення файлу встановлювального пакунка — .msi.[4]
Перша версія Installer'а вийшла на початку 1999 як встановлювач Microsoft Office 2000. Наприкінці того ж року Installer став частиною Windows 2000. Майкрософт всіляко заохочував перехід розробників на новий встановлювач, включивши в список вимог до програм, які бажали отримати так званий знак Windows 2000 Logo, вимогу встановлюватися за допомогою Windows Installer.
Windows Installer виявився значним кроком вперед відносно попереднього інсталятора Microsoft-setup API (ACME Setup): в ньому введено можливості GUI, підтримку деінсталяції та відкочування у будь-який момент встановлення (а також відкочування під час деінсталяції), коректну роботу з правами доступу у Windows та інші можливості, що зробило його сильною альтернативою різним наявним на ринку інсталяційним пакункам.
В майбутніх оновленнях буде представлено .MSIX, який стане своєрідним гібридом .APPX і .MSI, що дозволяє інсталювати UWP застосунки в систему (зараз це можливо тільки безпосередньо через Microsoft Store).[уточнити]
Встановлювальний пакунок описує встановлення одного продукту і має свій GUID. Продукт складається з компонентів (components) (теж мають свої GUIDи), згруповані в можливості (features).
Компонент (component) — мінімальна неподільна встановлювальна одиниця, що являє собою групу файлів, значень реєстру, створюваних папок та інших елементів, об'єднаних загальною назвою (назвою компоненту) і або встановлюваних разом, або не встановлюваних. Компоненти приховані від кінцевого користувача. Кожен компонент має ключовий шлях (key path) — наприклад, ім'я свого головного файлу — за яким визначається наявність цього компоненту на комп'ютері користувача.
Можливість (feature) — це ієрархічна група компонентів і/або інших можливостей. Коли при встановленні показується діалог вибору встановлюваних частин програми, користувач керує вибором саме можливостей. Вибір можливості для встановлення тягне за собою встановлення всіх компонентів, які вона включає[5].
Файл .msi — це складений документ OLE (OLE compound document — в такому ж форматі-контейнері зберігаються документи Microsoft Word, Excel тощо), в якому міститься невелика реляційна база даних — набір з декількох десятків взаємопов'язаних таблиць, що містять різну інформацію про продукт і процес встановлення. При цьому всі рядкові дані в базі зберігаються разом в окремому потоці документа, а в таблицях бази на них є посилання; таким чином уникають дублювання рядків, що значно зменшує розмір бази.
Крім бази, структура файлу .msi передбачає вміщення туди користувацьких сценаріїв і допоміжних DLL, якщо такі потрібні для встановлення, а також самих встановлюваних файлів, запакованих у форматі .cab. Файли можна розміщувати й окремо від пакунка, в запакованому або розпакованому вигляді (зі збереженням структури папок).
Процес встановлення складається з декількох етапів — збору інформації, виконання (власне встановлення), а також, можливо, відкочування (в разі помилки або скасування встановлення користувачем).
Кожен етап встановлення складається з послідовності дій (actions), записаної в базі даних. Діям присвоєно номери, що визначають порядок їх виконання, а іноді — й умови, за яких дії виконуються або не виконуються.
Більшість дій — це стандартні дії, характерні для типового процесу збору інформації і встановлення. Всі ці дії задокументовані, крім них, користувач може визначити і свої дії (custom actions).
Дії, визначені користувачем, можуть бути або написані однією зі скриптових мов, вбудованих в операційну систему (JScript або VBScript так само і Eclipse, побічна мова від C++), або розміщуватися в спеціально створеній DLL (написаній такими мовами, як C, C++ тощо). Файли з цими діями поміщаються всередину файлу .msi і добуваються звідти на початку запуску встановлення. Ці DLL добуваються в папку Windows\Installer, при цьому їм присвоюються випадкові імена, наприклад MSIF65E.tmp.
На етапі збору інформації Windows Installer збирає інструкції (через взаємодію з користувачем або програмним шляхом) щодо встановлення чи видалення однієї або кількох можливостей, які входять у продукт. Ці інструкції надалі формують на основі бази даних внутрішній сценарій, який детально описує подальше виконання.
Цей етап називають також безпосереднім режимом (immediate mode).
До початку цього етапу встановлювач генерує внутрішній сценарій, призначений для виконання без втручання користувача. Цей сценарій виконується встановлювачем у привілейованому режимі служби NT (конкретно — під обліковим записом LocalSystem). Привілейований режим потрібен через те, що встановлення міг запустити користувач, який не має прав, необхідних для змінювання системних параметрів і файлів (хоча право встановити програму йому надано).
Цей етап іноді називається відкладеним режимом (deferred mode).
Якщо будь-яка з дій, визначених у сценарії, закінчується невдачею, або встановлення в процесі скасовується Користувачем, усі дії, виконані до цього моменту, відкочуються, повертаючи систему в стан, що був до установки. Відкочування забезпечується наявністю для кожної дії, яка вносить зміну в систему, зворотної до неї. Уводячи в пакунок нестандартні дії, програміст має створити також зворотні до них для правильної роботи відкочування[6].
Windows Installer може рекламувати продукт, а не встановлювати його[7]. Продукт з'явиться у користувача, але він фактично не буде встановлений доти, поки його не запустять уперше (за допомогою ярлика в меню «Пуск»). Адміністратор може оголосити встановлювальний пакунок з використанням групової політики Windows, або іншого механізму компілювання, або запуском виконуваного файлу msiexec за допомогою /jm (для реклами для кожного пристрою), або /ju (для реклами для кожного користувача). Деякі пакунки MSI, створені в InstallShield, можуть перешкодити використанню цих та інших вбудованих функцій MSI.
Щоб завершити рекламоване встановлення, користувачу потрібні права адміністратора.
Подібно до рекламування продукту, встановлення на вимогу встановлює можливість, як тільки користувач намагається нею скористатись[8].
- Nullsoft Scriptable Install System
- Inno Setup
- Wise Package Studio
- Розділ Windows Installer [Архівовано 30 травня 2018 у Wayback Machine.] (англ.) MSDN