Почему установщики Windows (MSI-файлы) удаляются намного дольше, чем другие установщики?

24288
Chris S

Со времен Windows XP установщикам Windows (MSI-файлам), в том числе установщикам InstallShield (которые являются лишь начальной загрузкой для MSI), понадобилось в пять раз больше времени для удаления приложения, чем другим установщикам. То же правило касается и установки.

Почему они все еще так долго, и почему люди все еще используют MSI для установки? Например:

Удаление VLC - занимает около 5 секунд.
Удалить XYZ - запускает «Подготовка к удалению ...» с 15-секундной задержкой.

Все, что он делает, это удаляет файлы и очищает реестр (который может включать регистрации COM), так почему же это занимает так много времени?

31
Я просто хочу отметить, что это верно только в том случае, если вы (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

4 ответа на вопрос

32
harrymc

Сначала установщик Windows систематически создает точку восстановления системы, что является довольно медленной операцией.

Также из статьи, озаглавленной, соответственно, «Установщик Windows отстой», выдержка:

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

Это не так, как работает установщик 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 также требуется некоторое время для извлечения файлов установки .

Посмотрите этот ответ для технических деталей для ускорения установки MSI .

3
Breakthrough

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

Наиболее распространенная причина, о которой я могу думать, - это автоматические установки и сетевые дистрибутивы. Крупные корпорации могут легко распространять приложения, имея файл MSI на сетевом диске, а затем просто вызывая пакетный файл (или приложение мастера распространения) на удаленной машине, чтобы автоматизировать процесс установки.

В то время как другие параметры существуют вне файлов .MSI, есть некоторые уникальные функции, которые интегрируются с большинством версий Windows, которых нет у многих других установщиков.

И чтобы вы знали - InstallShield не всегда является интерфейсом для файлов MSI. У них также есть свое собственное решение для установки.

Вопрос был в том, почему MSI так долго что-то делает, по сравнению с чистыми установщиками .exe. grawity 14 лет назад 1
От вопроса ... "а почему люди до сих пор используют MSI для установки?" Breakthrough 14 лет назад 5
@grawity: технически, MSI-установщики могут быть упакованы в exe, но это, вероятно, раскалывает волосы. music2myear 12 лет назад 0