Почему установщик Windows может устанавливать только одну программу одновременно?

10

Мне всегда было интересно, почему установщик Windows позволяет устанавливать только одну программу за раз. Очень расстраивает отсутствие возможности запуска нескольких установок, особенно при настройке новой установки Windows. В чем причина этого?

Rytis
источник

Ответы:

6

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

  • Вам нужно заблокировать файлы
  • Должна быть возможность отменить промежуточные изменения в случае сбоя установки (не уверен, возможно ли это сейчас?)

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

Если вы заблокируете все необходимые файлы заранее, вы получите то, что у вас есть: один установщик должен дождаться завершения работы другого. Если вы не заблокируете все необходимые файлы заранее и продолжите работу, вы рискуете, что «транзакция» не удастся. Это будет означать, что один из установщиков должен быть перезапущен.

Тогда вам, возможно, придется подумать об уровнях изоляции транзакций - чтобы быть полностью корректными, ваши транзакции должны быть «сериализуемыми» - но это нелегко, даже для многих баз данных.

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

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

Заметка

Но, возможно, то, что вы действительно хотите, - это даже не установка «одновременно». Возможно, было бы достаточно, если бы вы могли поставить в очередь установки, которые затем выполнялись одна за другой (в идеале, не задавая вопросов между ними). И это действительно нечто, некоторые другие ОС (дистрибутивы) справляются намного лучше.

Крис Лерчер
источник
1
Хотя этот ответ правильный, он кажется мне слишком многословным. Кто-то, спрашивающий, почему служба установщика работает так, как он, вряд ли поймет этот ответ.
gWaldo
2
@gWaldo: Хорошо, может быть, вы правы ... Опять же, я не просто хочу сказать: "Это сложно, поверь мне (точка). Ты все равно не поймешь". Возможно, ОП (или кто-то еще, спотыкающийся в этом вопросе) действительно заинтересован, и ответ, который доходит до сути проблемы, поможет ему оценить, действительно ли для решения чего-то, что выглядит так легко, требуется много сложностей. поверхность. Кто знает?
Крис Лерчер
Очень верно. Неплохо подмечено.
gWaldo
Хотя все разговоры об изоляции звучат правдоподобно, вы можете запустить несколько установщиков, если они не используют среду установщика Windows. У меня никогда не было ни одного из них, если бы они работали бок о бок ... Может быть, мне просто повезло :) Что касается установок с очередями, для этого есть инструменты, но с учетом многоядерных процессоров (черт, настольные процессоры теперь могут запускать 8 потоков) ...), кажется, что управление ими рядом будет ответом (хотя они все еще могут бороться за ввод / вывод).
Ритис
2
@Rytis: Я бы хотел, чтобы мне повезло так же :-) - У меня были случайные сбои в установщиках, даже без одновременного запуска. О многоядерных процессорах. Существует другой способ их использования: использование нескольких ядер в одном процессе установки. Это все еще не всегда возможно или легко, но может быть скоординировано намного лучше. В целом, я думаю, что наибольшая экономия времени по-прежнему сохраняется, если весь процесс установки (очередь) задает вопросы только в начале и в конце. Затем вы можете выпить кофе или сделать что-нибудь еще во время установки (и использовать оставшиеся ядра для всего, что вы хотите сделать).
Крис Лерчер
6

Это сделано для того, чтобы две установки не манипулировали одними и теми же файлами / папками / ключами реестра / и т. Д .; возможно, это можно было сделать по-разному, но Microsoft сделала этот выбор.

Massimo
источник
Любая ссылка для поддержки вашей претензии?
Аарон Дигулла
1

Вы можете удалить несколько файлов MSI для быстрой установки один за другим, используя командный файл. Нельзя одновременно запускать два файла MSI в том смысле, что оба они одновременно записывают на диск.

Причина в том, что часть установки MSI выполняется как «транзакция» - последовательность изменений, которые либо фиксируются, либо откатываются в зависимости от того, завершены ли действия в списке транзакций без ошибок. Все должно завершиться без ошибок, и затем транзакция будет зафиксирована, в противном случае произойдет полный откат всех изменений. Следовательно, только одна такая транзакция может быть активной в любой момент времени.

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

Штейн Осмул
источник