Почему установщики Windows (MSI-файлы) удаляются намного дольше, чем другие установщики?
24288
Chris S
Со времен Windows XP установщикам Windows (MSI-файлам), в том числе установщикам InstallShield (которые являются лишь начальной загрузкой для MSI), понадобилось в пять раз больше времени для удаления приложения, чем другим установщикам. То же правило касается и установки.
Почему они все еще так долго, и почему люди все еще используют MSI для установки? Например:
Удаление VLC - занимает около 5 секунд. Удалить XYZ - запускает «Подготовка к удалению ...» с 15-секундной задержкой.
Все, что он делает, это удаляет файлы и очищает реестр (который может включать регистрации COM), так почему же это занимает так много времени?
Я просто хочу отметить, что это верно только в том случае, если вы (1) отключили функцию контрольной точки восстановления системы, * и * (2) это гигантский установщик (который не уникален для установщика Windows - я видел много медленных Inno установщики, просто потому что они огромные). У меня были установщики Windows, устанавливающие * и * удаляющие себя (буквально) за несколько секунд. (Например, Bootvis устанавливается в моей системе за 3 секунды. Он удаляется за то же время. И нет, моя система тоже не работает быстро.) Разница в том, что установщик Windows имеет гораздо больше функций, поэтому большие программы используйте это чаще.
Mehrdad 12 лет назад
0
@ Mehrdad Вы имели в виду (1) включить восстановление системы?
Chris S 12 лет назад
0
Действительно, да, опечатка.
Mehrdad 12 лет назад
0
Я пришел сюда, потому что удаление MSI длилось вечно ... и на самом деле причина была в том, что всплывающее окно "Вы хотите, чтобы следующая программа от неизвестного издателя вносила изменения в этот компьютер?" Пряталось в фоновом режиме.
Nicolas Raoul 10 лет назад
2
Посмотрите этот ответ для технических деталей для ускорения установки MSI: http://superuser.com/a/296534/11906
Stein Åsmul 9 лет назад
0
Раньше считалось, что установка будет состоять из программы, выполняющей и выполняющей несколько простых шагов для установки программного обеспечения, а затем делающей наоборот при удалении.
Это не так, как работает установщик Windows. Вместо того, чтобы запускать программу для простой установки и выполнения этого, она проверяет состояние вашей системы, затем проверяет состояние базы данных, которая является установщиком программы, а затем выполняет серию слишком сложных вычислений о том, как их согласовать.
Кажется, что вместо запуска сценария установки речь идет о решении задачи коммивояжера. Вот почему он работает так медленно. Или, по крайней мере, это мое впечатление.
Я также добавляю, что установщик Windows хранит всю информацию в реестре, который не является самой быстрой базой данных в мире.
Вероятно, это быстрее, чем то, что `dpkg` использует для своей базы данных пакетов (хотя, по общему признанию, dpkg не хранит в себе * все *):` / var / lib / dpkg / status` - это простой текстовый файл, который перечисляет каждый отдельный пакет это было однажды установлено, и с тех пор не было очищено - и я даже не уверен, что оно всегда пропускает очищенные.
SamB 13 лет назад
3
`dpkg` не лжет мне с индикаторами выполнения, которые показывают" Оставшееся время: 0 секунд "в течение двух минут, хотя ...
LawrenceC 10 лет назад
3
19
A Dwarf
Установщик Windows действительно имеет репутацию медленного. Есть несколько вещей, которые способствуют этому, и я собираюсь рассмотреть их ниже. Но, в конечном счете, следует спросить себя, действительно ли одна, две или три минуты вызывают споры при установке и удалении программного обеспечения. Я занимаю больше времени, чем просмотр телеканалов :)
Реестр Это виновник номер один. Установщик Windows интенсивно использует реестр для своих операций. По мере развития вашей системы, установки и удаления приложений, а также увеличения размера или фрагментации реестра MSI будет работать медленнее. Это же приложение будет устанавливаться и удаляться намного быстрее при первоначальной установке Windows, чем в зрелой системе. Решением здесь является попытка сохранить реестр в чистоте и дефрагментации.
Для очистки реестра используйте один из множества доступных инструментов. Но для дефрагментации реестра я не могу рекомендовать достаточно NTREGOPT для внутренней оптимизации улья и PageDefrag для физической дефрагментации файлов.
Причина, по которой операции MSI могут замедляться в реестре, связана с тем, как MSI использует его. Установщик Windows использует реестр для отслеживания того, какие продукты установлены, какие компоненты и в каком месте он был установлен. Исходные идентификаторы 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 Debug. Или, для меньшей, но все же ценной информации, вот как активировать ведение журнала.
Кроме того, насколько я знаю, MSI использует транзакции для всего, что он делает, поэтому он всегда может выполнить надлежащий откат в случае сбоя операции. Это, вероятно, также не способствует скорости, но весьма важно для целостности данных. (Я перестал считать, как часто мне нужно было выполнять очистку после сбоя программы установки NSIS -.-)
Joey 14 лет назад
4
Прямо сейчас я устанавливаю OpenOffice и это уже почти час;)
Quiark 13 лет назад
0
Очень информативно. Я, например, часто получаю ошибки «Не удается создать точку восстановления» (может быть, достигнута точка восстановления точки?) В моих журналах MSI, поэтому создание точек восстановления не дает возможности помешать моему времени установки. Несмотря на это, время моей установки все еще медленное, и если поиск значений такой же медленный, как вы говорите, я полагаю, что у Microsoft нет никаких причин предоставлять дополнительную реализацию для дополнительной информации о листе / узле в двоичной спецификации реестра для дополнить бинарный поиск.
chaz 11 лет назад
0
> Но, в конечном счете, следует спросить себя, действительно ли одна, две или три минуты вызывают споры при установке и удалении программного обеспечения. Да.
Alexei Averchenko 11 лет назад
0
6
Stein Åsmul
Установщик Windows имеет много больших преимуществ для корпоративного развертывания, некоторые из которых я описал здесь: https://serverfault.com/a/274609/20599
Большая часть медлительности сеанса установщика Windows связана с его возможностями отката . Во-первых, он создает точку восстановления перед установкой или удалением (при условии, что восстановление системы не было отключено). Затем он выполнит резервное копирование всех уязвимых файлов во время удаления и установки, чтобы гарантировать, что система может быть восстановлена в исходное состояние в случае возникновения ошибки.
Еще одним фактором является то, что все компоненты в MSI будут зарегистрированы в реестре . Это связано с некоторыми накладными расходами .
Для скомпилированных файлов MSI также требуется некоторое время для извлечения файлов установки .
Установщики Windows так часто используются по многим причинам - интеграция операционной системы, политики безопасности, автоматические установки и многое другое.
Наиболее распространенная причина, о которой я могу думать, - это автоматические установки и сетевые дистрибутивы. Крупные корпорации могут легко распространять приложения, имея файл MSI на сетевом диске, а затем просто вызывая пакетный файл (или приложение мастера распространения) на удаленной машине, чтобы автоматизировать процесс установки.