Чому інсталятор Windows може одночасно встановлювати лише одну програму?


10

Мені завжди було цікаво, чому інсталятор Windows дозволяє встановлювати лише одну програму за один раз. Дуже неприємно не мати можливості запускати декілька інсталяцій, особливо під час налаштування нової установки Windows. У чому причина цього?

Відповіді:


6

Було б дуже складно гарантувати правильність, коли відбуваються паралельні установки - якщо припустити, що вони діляться деякими файлами. Для цього знадобиться певна форма транзакцій.

  • Вам потрібно заблокувати файли
  • Якщо проміжок встановлення не вдасться скасувати проміжні зміни, якщо це можливо зараз?)

Ці поняття відомі з транзакційних баз даних, але тема не є тривіальною, і ви зазвичай не знаходите повністю транзакційної інфраструктури у файлових системах (навіть якщо файлові системи журналів є частиною цього). Одна проблема полягає в тому, що кілька блокувань можуть призвести до тупикової ситуації - тоді вам потрібно виявити тупиковий стан (або обидва інсталятори будуть висіти назавжди), і спосіб їх вирішити. Можна уникнути тупикових ситуацій (наприклад, завжди блокуючи файли в одному порядку), але є й інші проблеми:

Якщо ви заблокуєте всі необхідні файли вперед, ви отримаєте ефективно те, що у вас є: Один інсталятор повинен дочекатися, поки інший закінчиться. Якщо ви не заблокуєте всі необхідні файли вперед і продовжуєте продовжувати, ви ризикуєте, що "транзакція" вийде з ладу. Це означало б, що одного з встановників доведеться перезапустити.

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

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

Я вважаю, що при одночасному встановленні у нас виникли б набагато більш важкі проблеми після встановлення - тим більше, що я не думаю, що постачальник ОС (або дистрибутив) пережив би всі проблеми, щоб зробити його на 100% чистим. Тому я вважаю за краще не використовувати його, навіть якщо це запропонувала ОС.

Примітка

Але, можливо, те, що ви насправді хочете, це навіть не встановлювати «одночасно». Можливо, цього буде достатньо, якби ви могли встановити чергу з установками, які потім виконуються одна за одною (в ідеалі, не задаючи між ними жодних питань). І це дійсно щось, деякі інші ОС (дистрибутиви) справляються набагато краще.


1
Хоча правильна, ця відповідь здається мені занадто багатослівною. Хтось запитує, чому служба встановлення працює так, як це відбувається, швидше за все, не зрозуміє цю відповідь.
gWaldo

2
@gWaldo: Гаразд, може, ти маєш рацію ... Тоді знову кажу, я не просто хочу сказати: "Це складно, повірте мені (період). Ви все одно не зрозуміли б це". Можливо, ОП (або хтось інший, що спіткнувся з цим питанням) по-справжньому зацікавлений, і відповідь, яка потрапить до основи проблеми, допоможе йому оцінити, якщо дійсно багато складних проблем, щоб вирішити щось, що виглядає настільки просто. поверхня. Хто знає?
Кріс Лерчер

Дуже правильно. Це хороший момент.
gWaldo

Хоча всі розмови про ізоляцію звучать правдоподібно, ви можете запустити декілька інсталяторів, якщо вони не використовують рамку Windows Installer. У мене ніколи не було зламань, коли вони бігали поруч ... Можливо, мені просто пощастило :) Що стосується встановлення черги, то для цього є інструменти, але дано багатоядерні процесори (чорт, настільні процесори тепер можуть працювати 8 ниток ...), здається, відповідь на них буде поруч (хоча вони все ще можуть боротися за введення-виведення).
Ритіс

2
@Rytis: Я б хотів, щоб я мав таку ж удачу :-) - У мене інсталятори ламаються випадковим чином, навіть не запускаючи їх одночасно. Про багатоядерність: Існує ще один спосіб їх використання: Використання декількох ядер протягом одного процесу встановлення. Це все ще не завжди можливо чи просто, але їх можна узгодити набагато краще. В цілому, я вважаю, найбільша економія часу все ж залишається, якщо весь процес встановлення (черги) задає питання лише на початку та в кінці. Тоді ви можете випити каву або зробити щось інше, поки інсталяція працює (і використати залишилися сердечники для того, що ви хочете зробити.).
Кріс Лерчер

6

Це задумано, щоб уникнути того, щоб дві установки маніпулювали одними і тими ж файлами / папками / ключами реєстру / тощо; можливо, це можна було зробити по-різному, але Microsoft зробила цей вибір.


Будь-яка посилання на підтвердження вашої претензії?
Аарон Дігулла

1

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.