Чому для встановлення Windows (файлів .msi) потрібно видалити стільки часу, ніж інші інсталятори?


31

Починаючи з Windows XP днів, для видалення програми інсталяторам Windows (файли .msi), у тому числі установникам InstallShield (що є лише завантажувальним процесом для MSI), було потрібно п’ять разів більше часу. Те саме, як правило, стосується встановлення.

Чому вони все ще тривають так довго і чому люди все ще використовують MSI для встановлення? Наприклад:

Видалення VLC - займає близько 5 секунд.
Видалити XYZ - запускає "Підготовка до видалення ..." з подальшим затримкою на 15 секунд.

Все, що він робить, - це видалення файлів та очищення реєстру (що може включати реєстрації COM), так чому це займає так довго?


Я просто хочу зазначити, це справедливо лише в тому випадку, якщо ви (1) відключили функцію контрольної точки відновлення системи, і (2) це гігантський інсталятор (який не властивий інсталятору Windows - я бачив багато повільних інсталяторів Inno, просто тому, що вони величезні). У мене інсталятори Windows встановлювали та видаляли себе (буквально) за кілька секунд. (Наприклад, Bootvis встановлюється за 3 секунди в моїй системі. Він видаляється за стільки ж часу. І ні, моя система також не швидко вистрілює.) Різниця полягає в тому, що Windows Installer має набагато більше функцій, тому більші програми використовуйте його частіше.
Мехрдад

@Mehrdad Ви мали на увазі (1) включення відновлення системи?
Кріс С

Справді так, друкарня.
Мехрдад

2
Я приїхав сюди, тому що видалення MSI проводили назавжди ... і фактично причиною було те, що спливаючі вікна Do you want to allow the following program from an unknown publisher to make changes to this computer?ховалися на задньому плані.
Ніколя Рауль

Дивіться цю відповідь щодо технічних деталей щодо прискорення встановлення MSI: superuser.com/a/296534/11906
Stein Åsmul

Відповіді:


32

Інсталятор Windows спочатку систематично створює точку відновлення системи, що є досить повільною роботою.

Також із статті під назвою "Інсталятор Windows смокче" , уривок:

Раніше така інсталяція полягала б у виконанні програми та виконанні декількох простих кроків для встановлення вашого програмного забезпечення, а потім зробіть зворотний процес при видаленні.

Це не так, як працює Windows Installer. Замість того, щоб запустити програму для простої установки та дозволити це зробити, вона вивчає стан вашої системи, потім вивчає стан бази даних, яка встановила програму, а потім робить низку складних обчислень щодо їх узгодження.

Здається, що замість запуску інсталяційного сценарію, йдеться про вирішення проблеми мандрівного продавця. Ось чому він працює так повільно. Або принаймні, таке моє враження.

Також додаю, що інсталятор Windows зберігає всю інформацію в реєстрі, яка не є найшвидшою в світі базою даних.


3
Це, мабуть, швидше, ніж те, що dpkgвикористовується для його бази даних пакетів (хоча, правда, dpkg не зберігає у ньому все ): /var/lib/dpkg/statusце плоский текстовий файл, у якому перераховано кожен пакет, який був колись встановлений, і з тих пір не був очищений - і я Я навіть не впевнений, що це завжди омиває очищених.
СамБ

3
dpkgМені не брешуть смуги прогресу, які говорять "Залишився час: 0 секунд" протягом двох хвилин ...
LawrenceC

20

Windows Installer справді має репутацію повільності. Є кілька речей, які сприяють цьому, і я їх вирішу нижче. Але в кінцевому підсумку слід запитати себе, чи справді одна, дві чи три хвилини викликають суперечки при встановленні та видаленні програмного забезпечення. Я забираю більше часу, ніж прогортаючи телеканали :)

Реєстр
Це винуватець номер один. Windows Installer широко використовує реєстр для своїх операцій. По мірі дозрівання вашої системи, коли ви встановлюєте та видаляєте програми, і коли реєстр збільшується в розмірах або стає фрагментарним, MSI стане повільніше. Цей самий додаток буде встановлено та видалено набагато швидше в незайманій установці Windows, ніж це буде у зрілої системи. Рішення тут полягає в тому, щоб спробувати зберегти реєстр в чистоті та дефрагментації.

Для очищення реєстру використовуйте один із багатьох інструментів, наявних там. Але для дефрагментації реєстру я не можу рекомендувати достатню кількість NTREGOPT для внутрішньої оптимізації вуликів та PageDefrag для фізичної дефрагментації файлів.

Причина, що операції MSI можуть стати повільними в реєстрі, пов'язана з тим, як MSI використовує її. Windows Installer використовує реєстр, щоб відстежувати, які продукти встановлені, які компоненти та в якому розташуванні він був встановлений. Оригінальні GUID установки використовуються у стисненому форматі. Інформацію про встановлення на окремих машинах можна знайти на веб-сайті HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, тоді як дані про кожного користувача знаходяться поруч із ним під HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\ключем та під ключем із користувацьким SID.

Обидва ці ключа можуть бути досить великими і містять численні підрозділи та значення. Вони контролюють Продукти, Компоненти та Ключові шляхи кожної встановленої програми. Вся ця інформація повинна бути прочитана та оброблена для правильної процедури видалення. Однак формат реєстру перераховує ключі в алфавітному порядку, що дозволяє виконувати двійкові пошуки. Але значення - ні. Вони зберігаються у міру їх створення, тому необхідно виконувати лінійну процедуру пошуку. Що уповільнює роботу алгоритму.

Загалом, MSI - це досить повний і точний метод установки та деінсталяції програмного забезпечення. Але це страждає від залежності її реєстру. Система відмінна. Саме реєстр Windows мав би давно провести капітальний ремонт :)

Для отримання додаткової інформації:
Для глибокого аналізу того, що робить MSI під час кожної процедури встановлення чи видалення, перегляньте цю статтю, яка пояснює, як налаштувати налагодження MSI. Або для менш, але все ж цінної інформації, ця, як активувати ведення журналу.


4
Крім того, наскільки я знаю, MSI використовує транзакції для всього, що робить, тому завжди може зробити належний відкат, коли операція не завершиться. Це, мабуть, також не сприяє швидкості, але цілком важливо для цілісності даних. (Я перестала рахувати, як часто мені потрібно прибиратись після того, як програма встановлення NSIS не вдалася -.-)
Joey,

Зараз я встановлюю OpenOffice, і це вже майже година;)
Quiark

Дуже інформативний. Я, здається, часто отримує помилки "Неможливо створити точку відновлення" (можливо, відновлення досягнуто цитати?) В моїх журналах msi, тому створення точок відновлення не дає можливості перешкоджати моєму встановленню. Незважаючи на те, що час моєї установки все ще повільний, і якщо пошук значень настільки ж повільний, як ви говорите, я вважаю, що немає жодної причини з боку Microsoft, щоб забезпечити додаткову реалізацію додаткової інформації про листя / вузли у бінарній специфікації реєстру для доповнити двійковий пошук.
час

> Але в кінцевому підсумку варто запитати себе, чи справді одна, дві чи три хвилини викликають суперечки при встановленні та видаленні програмного забезпечення. Так.
Олексій Аверченко

6

Програма встановлення Windows має багато великих переваг для корпоративного розгортання , деякі з яких я описав тут: https://serverfault.com/a/274609/20599

Значна частина повільності сеансу встановлення Windows пов'язана з його можливостями відкату . По-перше, він створює точку відновлення до встановлення чи видалення (за умови відновлення системи не було відключено). Тоді він створить резервну копію всіх пошкоджених файлів під час видалення та встановлення, щоб гарантувати відновлення системи до початкового стану, якщо сталася помилка.

Ще одним фактором, що сприяє, є те, що всі компоненти MSI будуть зареєстровані в реєстрі . Це пов'язано з деякими накладними витратами .

Для складених файлів MSI також потрібно деякий час для вилучення встановлених файлів .

Дивіться цю відповідь щодо технічних деталей щодо прискорення встановлення MSI .


3

Інсталятори Windows настільки часто використовуються з багатьох причин - інтеграція операційної системи, політика безпеки, установки без догляду та багато іншого.

Найпоширеніша причина, про яку я можу подумати - це безвідповідні установки та мережеві дистрибутиви. Великі корпорації можуть легко поширювати програми, маючи файл .MSI на мережевому диску, а потім просто викликаючи пакетний файл (або програму майстра розповсюдження) на віддаленій машині для автоматизації процесу встановлення.

Незважаючи на те, що інші параметри існують поза файлами .MSI, є деякі унікальні функції, які інтегруються в більшість версій Windows , у яких немало інших інсталяторів.

І тільки щоб ви знали - InstallShield не завжди є передовим файлом MSI. Вони також мають власне власницьке рішення щодо встановлення.


1
Питання полягало у тому, чому MSI займає стільки часу, щоб щось зробити, порівняно з чистими .exe-установниками.
grawity

5
З питання ... "а чому люди все ще використовують MSI для встановлення?"
Прорив

@grawity: технічно інсталятори msi можуть бути також упаковані в програму exe, але це, мабуть, розщеплення волосся.
music2myear
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.