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


31

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

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

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

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


Я просто хочу отметить, что это верно только в том случае, если вы (1) отключили функцию контрольной точки восстановления системы и (2) это гигантский установщик (который не уникален для установщика Windows - я видел много медленных установщиков Inno, просто потому что они огромные). Я установил Windows и удалил себя (буквально) за несколько секунд. (Например, Bootvis устанавливается за 3 секунды на моей системе. Он удаляется за то же время. И нет, моя система тоже не работает быстро.) Разница в том, что установщик Windows имеет гораздо больше функций, поэтому большие программы используйте это чаще.
Мердад

@ Mehrdad Вы имели в виду (1) включить восстановление системы?
Крис С

Действительно, да, опечатка.
Мердад

2
Я пришел сюда, потому что удаление MSI длилось вечно ... и на самом деле причина была в том, что всплывающее окно Do you want to allow the following program from an unknown publisher to make changes to this computer?скрывалось в фоновом режиме.
Николас Рауль

Посмотрите этот ответ для технических деталей для ускорения установки MSI: superuser.com/a/296534/11906
Стейн Осмул

Ответы:


32

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

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

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

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

Кажется, что вместо запуска сценария установки речь идет о решении проблемы коммивояжера. Вот почему он работает так медленно. Или, по крайней мере, это мое впечатление.

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


3
Это, вероятно, быстрее, чем то, что dpkgиспользуется для его базы данных пакетов (хотя, по общему признанию, dpkg не хранит в ней все ): /var/lib/dpkg/statusэто простой текстовый файл, в котором перечислены все пакеты, которые были когда-то установлены, и с тех пор не были очищены - и я Я даже не уверен, что он всегда пропускает очищенные.
SamB

3
dpkgне лжет мне с индикаторами выполнения, которые показывают «Оставшееся время: 0 секунд» в течение двух минут, хотя ...
LawrenceC

20

Установщик 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. Или, для меньшей, но все же ценной информации, вот как активировать ведение журнала.


4
Кроме того, насколько мне известно, MSI использует транзакции для всего, что он делает, поэтому он всегда может выполнить надлежащий откат в случае сбоя операции. Это, вероятно, также не способствует скорости, но весьма важно для целостности данных. (Я перестал считать, как часто мне нужно было выполнять очистку после сбоя программы установки NSIS -.-)
Joey

Прямо сейчас я устанавливаю OpenOffice, и это уже почти час;)
Quiark

Очень информативно. Я, например, часто получаю ошибки «Не удается создать точку восстановления» (может быть, достигнута точка восстановления точки?) В моих журналах msi, поэтому создание точек восстановления не дает возможности помешать моему времени установки. Несмотря на это, время моей установки все еще медленное, и если поиск значений идет так же медленно, как вы говорите, я полагаю, что у Microsoft нет никаких причин предоставлять дополнительную реализацию для дополнительной информации о листе / узле в двоичной спецификации реестра для дополнить бинарный поиск.
Chaz

> Но, в конечном итоге, следует спросить себя, действительно ли одна, две или три минуты вызывают споры при установке и удалении программного обеспечения. Да.
Алексей Аверченко

6

Установщик Windows имеет много больших преимуществ для корпоративного развертывания , некоторые из которых я описал здесь: /server//a/274609/20599

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

Еще одним фактором является то, что все компоненты в MSI будут зарегистрированы в реестре . Это связано с некоторыми накладными расходами .

Для скомпилированных файлов MSI также требуется некоторое время для извлечения файлов установки .

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


3

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

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

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

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


1
Вопрос был в том, почему MSI так долго что-то делает, по сравнению с чистыми установщиками .exe.
grawity

5
От вопроса ... "а почему люди до сих пор используют MSI для установки?"
Прорыв

@grawity: технически, MSI-установщики могут быть упакованы в exe, но это, вероятно, раскалывает волосы.
music2myear
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.