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


99

Почему Windows не позволяет вам удалять или удалять несколько программ одновременно? В чем причина этого? Это испортит внутреннюю систему?

Я не ищу, как удалить несколько программ одновременно, я просто ищу причину, почему это не будет вариант.


9
Чтобы люди не могли удалить все сразу ... возможно.
М.Беннетт

@ M.Bennett Я тоже так думал, но нет способа выбрать несколько программ, так что пользователи все равно не могут удалить все случайно.
Йерун Боллен

5
На самом деле вы можете удалить несколько программ одновременно, это единственный установщик Windows, который не позволяет вам удалить несколько программ, потому что он допускает только один экземпляр самого себя. Достаточно легко удалить программные файлы, вы можете удалить все содержимое программных файлов, если хотите, что удалит эти программы просто не эффективно.
Ramhound

@Ramhound: Вы , кажется, только один, кто правильно понял намерение Аскер: он хочет, чтобы система удаления программ в последовательности . Ответчики здесь поняли его вопрос по-разному: можно ли одновременно удалить несколько программ. Излишне говорить, что в Linux это легко возможно: вы просто печатаете apt-get -y uninstall prog1 prog2 prog3.
Никколо М.

4
@NiccoloM Мой вопрос был на самом деле, почему вы не можете одновременно. : P
Йерун Боллен

Ответы:


101

Если вы прочитали что-нибудь о том, как работает система установщика Windows, очевидно, что они применили некоторые идеи из транзакционных баз данных для установки и обслуживания программ, не говоря уже о том, что .msiсами файлы являются базой данных.

При проектировании любой базы данных всегда возникает вопрос: хотите ли вы скорость или точность / безопасность? Принимая во внимание, что установщики могут изменять конфигурацию системы и что случайный сбой может сделать систему неработоспособной, безопасность имеет приоритет над скоростью. Одна из причин, почему .msiустановщики так медленны, заключается в том, что файлы отката создаются для каждого файла и т. Д., Которые будут изменены, а затем удалены, что позволяет «откатывать» любые изменения, если что-то пойдет не так в середине ( например, сбой питания или сбой системы).

Теперь я считаю, что сам движок MSI обеспечивает установку, изменение или удаление только одной программы за раз - если вы пытаетесь запустить, в .msiто время как другая деинсталлируется, например, она либо не запустится, либо будет ждать текущей деинсталляции заканчивать. Установщики, не являющиеся MSI, могут вести себя не так, поскольку они не используют движок MSI. Но из-за этого решения по проектированию безопасности, вероятно, именно поэтому appwiz.cplнастаивает на том, чтобы позволить вызывать только один деинсталлятор за один раз.

CCleaner позволяет запускать деинсталляторы, не дожидаясь завершения ранее запущенных. Установщики MSI, вероятно, все еще не будут работать параллельно из-за вышеизложенного.


29
Следует отметить, что менеджеры пакетов в Unix-подобных системах также не будут пытаться удалить несколько пакетов одновременно по той же причине. Если вы удалите несколько пакетов, они будут удалены один за другим, возможно, каждый в своей собственной транзакции.
Джои

+1 Отличный ответ! Одна вещь, чтобы отметить. Если у вас есть несколько автономных исполняемых файлов, таких как CPU-Z, в папке, то вы можете удалить (удалить) их все сразу.
MonkeyZeus

4
@Joey Это правда, но вы можете по крайней мере дать указание менеджерам пакетов * nix сделать это, и они выполнят заказ. Я думаю, что большая проблема в том, что Windows не понимает концепцию зависимости на уровне управления пакетами.
Тюдор

4
@tudor: Я думаю, что разница в управлении приложениями в разных ОС Windows управляет приложениями , в то время как в Unix-подобных менеджерах пакетов, ну, в общем , управляются пакеты , которые могут быть библиотеками, приложениями и подобными вещами. Windows может управлять такими вещами (это точно происходит внутри, например, когда вы включаете или отключаете компоненты Windows), но наличие сторонних библиотек не получилось так хорошо в конце 90-х, поэтому приложениям рекомендуется просто связать все их зависимости.
Джои

@ Джо, я понимаю вашу точку зрения, но обвинять пользователя (или разработчика) в таком открытом общем пространстве не удастся. Пользователи видят только приложения, но приложения являются лишь подмножеством пакетов. Необходимо управлять несколькими библиотеками, даже с разными версиями и поставщиками . Требование от разработчика управлять им было в лучшем случае оптимистичным, ИМХО, и привело к большому раздутию. Windows Store делает некоторые шаги в этом направлении, но он все еще далек от автоматического разрешения зависимостей, что делает * nixes намного проще в этом отношении.
Тудор

19

Это действительно относится только к программам, использующим систему установщика Windows .

Если программа использует свои собственные (не) установочные системы, то ничто не помешает вам запустить другой деинсталлятор одновременно.

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

Большинство деинсталляторов отслеживают то, что они изменяют, поэтому они могут успешно откатиться в случае сбоя. Если кто-то не знает обо всех изменениях, которые были сделаны (другими деинсталляторами), он может на самом деле сделать вещи ХОРОШИ, если попытается откатить неудачную установку.

Система установщика Windows была создана с целью стать единой системой, которую могут использовать все разработчики приложений (в Windows), чтобы избежать подобных проблем.


9

Задачи удаления часто изменяют файлы, которые совместно используются несколькими программами, или системные файлы \ Реестр (частичная причина, по которой для этого требуется административная власть). Если несколько задач удаления выполнялись одновременно, они могут конфликтовать. Если вы когда-либо пробовали использовать «DLL Hell», это было бы то же самое. Другие программы или сама Windows могут остаться в несогласованном состоянии.


Это большая часть того, о чем правильный ответ. Если программа «A» устанавливает неосновную DLL-библиотеку Windows «X», то программе «B» она требуется в установщике, а также, вероятно, она будет частью деинсталлятора. Но удаление DLL "X" приведет к сбою программы "A". Таким образом, деинсталлятор обычно спрашивает об общих библиотеках DLL и других файлах, если они должны быть удалены. При одновременном запуске этот вид подсказок может не работать должным образом. Наконец, и, возможно, что еще более важно, все забыли реестр Windows - это основной компонент базы данных, который часто обновляется в установщиках / деинсталляторах.
Даррелл Тиг

-1

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


Это не имеет отношения к ответу. Все, что связано с дисковым вводом / выводом, может замедлиться, если вы делаете слишком много вещей одновременно, но единственное, что Windows действительно мешает вам, - это одновременная (не) установка. И есть веская причина хотеть иметь возможность выполнять одновременную (не) установку - пользователям было бы намного проще иметь возможность поставить в очередь кучу операций и позволить им всем работать вместе, вместо того, чтобы сидеть и ждать для каждого, чтобы завершить по очереди. Кроме того, проблема конкуренции устарела с SSD.
Эндрю Медико
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.