Было бы очень сложно гарантировать правильность при одновременной установке - при условии, что они совместно используют некоторые файлы. Это потребует некоторой формы транзакций.
- Вам нужно заблокировать файлы
- Должна быть возможность отменить промежуточные изменения в случае сбоя установки (не уверен, возможно ли это сейчас?)
Эти понятия известны из транзакционных баз данных, но эта тема не тривиальна, и вы обычно не найдете полностью транзакционную инфраструктуру в файловых системах (даже если файловые системы журналирования предоставляют часть этого). Одна проблема состоит в том, что множественные блокировки могут привести к взаимоблокировке - тогда вам нужно обнаружение взаимоблокировки (или оба установщика будут зависать вечно), и способ ее устранения. Можно избежать тупиков (например, всегда блокируя файлы в одном и том же порядке), но есть и другие проблемы:
Если вы заблокируете все необходимые файлы заранее, вы получите то, что у вас есть: один установщик должен дождаться завершения работы другого. Если вы не заблокируете все необходимые файлы заранее и продолжите работу, вы рискуете, что «транзакция» не удастся. Это будет означать, что один из установщиков должен быть перезапущен.
Тогда вам, возможно, придется подумать об уровнях изоляции транзакций - чтобы быть полностью корректными, ваши транзакции должны быть «сериализуемыми» - но это нелегко, даже для многих баз данных.
Могут быть даже альтернативные стратегии для решения проблем, которые обходят полную изоляцию, но обычно еще сложнее доказать их правильность.
Я полагаю, что при параллельной установке у нас будет гораздо больше неразрешимых проблем после установки - особенно потому, что я не думаю, что поставщик ОС (или дистрибутив) переживет все трудности, чтобы сделать его на 100% чистым. Поэтому я бы предпочел не использовать его, даже если он был предложен ОС.
Заметка
Но, возможно, то, что вы действительно хотите, - это даже не установка «одновременно». Возможно, было бы достаточно, если бы вы могли поставить в очередь установки, которые затем выполнялись одна за другой (в идеале, не задавая вопросов между ними). И это действительно нечто, некоторые другие ОС (дистрибутивы) справляются намного лучше.
Это сделано для того, чтобы две установки не манипулировали одними и теми же файлами / папками / ключами реестра / и т. Д .; возможно, это можно было сделать по-разному, но Microsoft сделала этот выбор.
источник
Вы можете удалить несколько файлов MSI для быстрой установки один за другим, используя командный файл. Нельзя одновременно запускать два файла MSI в том смысле, что оба они одновременно записывают на диск.
Причина в том, что часть установки MSI выполняется как «транзакция» - последовательность изменений, которые либо фиксируются, либо откатываются в зависимости от того, завершены ли действия в списке транзакций без ошибок. Все должно завершиться без ошибок, и затем транзакция будет зафиксирована, в противном случае произойдет полный откат всех изменений. Следовательно, только одна такая транзакция может быть активной в любой момент времени.
На техническом уровне MSI в качестве транзакции выполняются только действия между стандартными действиями InstallInitialize и InstallFinalize в InstallExecuteSequence. Вне этих действий не должно происходить никаких системных изменений, но иногда файлы MSI ошибочно предназначены для внесения изменений в другие последовательности.
источник