Очистка папки Windows\Installer. Удаление msp и msi патчей, отмеченных как замененные.

Вопрос или проблема

Кто-нибудь пробовал этот скрипт?

https://forums.mydigitallife.net/threads/presenting%E2%80%A6-startcomponentcleanup-for-msi-including-office.77708/

Он очистил около 6 Гб файлов в моей директории windows\installer, большинство из которых были старыми обновлениями Office 2016.

Есть ли недостатки в очистке старых и помеченных как устаревшие патчей msp и msi в директории установщика?

Что ж, я провел эксперимент на старом офисном компьютере с Win7 и Office 2010. Основным недостатком этого скрипта является время выполнения: чуть больше двух часов, даже несмотря на то, что этот (i3) ПК имел SSD. Выигрыш составил около 9 Гб дискового пространства после удаления всех промежуточных обновлений Office… но скрипт создал 20 Гб логов во временной папке, так что это не очень практично, если у вас заканчивается пространство. (Я сделал так, чтобы скрипт также сохранял вывод в лог: он удалил около 700 патчей.)

Я не заметил никаких негативных последствий: нет новых предлагаемых обновлений, если проверить наличие обновлений после запуска скрипта, так что он не удаляет ничего важного, и Office все еще работает и может быть обслужен (добавление/удаление компонентов работает).


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

Как Хит (MSFT) объясняет, если вы удалите устаревшие патчи, может случиться так, что если “верхний патч” также будет впоследствии удален вручную, вы останетесь с гораздо старой (и багованной) версией приложения, чем ожидалось. Я думаю, что в сочетании с функцией, что некоторые устаревшие пакеты могут быть неудаляемыми/«постоянными», это может сломать некоторые приложения; пропустите два абзаца, чтобы увидеть, как это может произойти. (постоянный – это ключевое слово, используемое в файле .mum.)

Но прежде чем мы перейдем к этому сценарию, позвольте мне прояснить кое-что (что является хорошим способом понять, что происходит): устаревшие патчи, хотя все еще присутствуют в реестре (именно так этот скрипт находит их), вообще не отображаются (по крайней мере, в Win 7) в установленных обновлениях, если они также не помечены как неудаляемые/. (Я тестировал это сам, изменив этот скрипт так, чтобы он ничего не удалял, а просто отображал, что он удалил бы, а затем проверял патчи в Панели управления.) Но если вы удалите верхний патч, вызывая устаревший но удаляемый, чтобы стать неустаревшим, он снова появится в этом списке Панели управления, когда вы его обновите. (Некоторые разработчики сторонних wix наборов инструментов находят это поведение довольно запутанным.)

Также удаление устаревших патчей не следует путать с msizap g, которое удаляет осиротевшие патчи, которые присутствуют в директории, но не ссылаются на них в реестре (вообще). Последнее иногда тоже необходимо, когда некоторые приложения “спамят” патчами, которые они даже не регистрируют вообще (VS 2005 был, по-видимому, известен этим).

Но на самом деле существует способ сломать приложение с плохо продуманными патчами, удалив промежуточные/устаревшие патчи: представьте, у вас есть файлы A и B, изначально оба версии 1.0. Патч X обновляет файл A до версии 1.1, что нормально с файлом B версии 1.0. Затем патч Y обновляет файл B до версии 1.1, что также совместимо с файлом A версии 1.1, но несовместимо с файлом A версии 1.0. Но каким-то образом этот патч Y сделан неудаляемым, что действительно может произойти многими способами. После этого у вас есть патч Z, который обновляет файлы A и B до версии 1.2. Затем кто-то запускает скрипт, который удаляет патч X (устаревший), но не может удалить Y (устаревший, но неудаляемый). А затем они вручную откатывают патч Z, оставляя файл A версии 1.0 и B версии 1.1 (из патча Y). И это ломает приложение.

Следует признать, что такой сценарий, вероятно, не происходит с приложениями MSFT, для которых они дают список последних MSP (патчей), которые безопасно устанавливать самостоятельно, т.е. без установки всех родительских MSP. Microsoft делает это например для Office 2016, но не для 2010 (хотя они даже удосужились сделать версию 2010 с возможностью “click-to-run”). И из моих быстрых проверок с помощью скрипта, Silverlight наделяет (многими) неудаляемыми (скрипт называет их “постоянными”) но устаревшими патчами, так что такие вещи существуют даже в области MS. На самом деле, Office 2010 также имеет несколько таких, например:

Microsoft Office Proof (Chinese (Traditional)) 2010: Обновление безопасности для Microsoft Office 2010 (KB2760781) 64-битная версия - это постоянный патч, запустите этот скрипт с /f, чтобы удалить его

И Adobe Acrobat Reader DC также ведет себя почти как Silverlight, с множеством неудаляемых и устаревших патчей.


Также стоит отметить, что достаточно старый документ Microsoft времен Vista говорит, что удаление устаревших вещей из %windir%\Installer является предварительным условием для безопасного удаления из SxS (что является еще одним источником раздувания):

Единственный способ безопасно уменьшить размер папки WinSxS – это уменьшить набор возможных действий, которые система может выполнить – самый легкий способ сделать это – удалить пакеты, которые первоначально установили компоненты. Это можно сделать путем удаления устаревших версий пакетов, которые находятся на вашей системе. Сервисный пакет 1 содержит бинарный файл VSP1CLN.EXE – инструмент, который сделает пакет Сервисного пакета постоянным (неудаляемым) на вашей системе и удалит версии RTM всех устаревших компонентов. Это можно сделать только потому, что, делая Сервисный пакет постоянным, мы можем гарантировать, что нам никогда не понадобятся версии RTM.

Таким образом, удаление устаревших вещей из %windir%\Installer также должно помочь уменьшить размер SxS. Обратите внимание, что существуют полуавтоматические способы, которые делают это после <ем>удаления какого-либо устаревшего патча, используя API, а не простое удаление, я подозреваю:

  • в Win 7 SP1 был введен метод около 2013 года с kb2852386, который добавляет новый плагин очистки диска (приложение). Но это не удалит никакие связанные с приложениями MSP из %windir%\Installer само по себе, я это тестировал. Этот плагин сохраняет свою работу в %SystemRoot%\Logs\CBS\DeepClean.log. Там вы можете видеть такие вещи, как:
Package_for_RollupFix~31bf3856ad364e35~amd64~~7601.23642.1.0 устарел - удален
2020-07-03 06:47:01, Info                  CBS    
  • В Win 10 есть dism /Cleanup-Image /StartComponentCleanup /ResetBase, который, согласно документации, превращает каждый не устаревший патч в “сервисный пакет”, который невозможно удалить. На самом деле документация последнего предполагает, что он может также удалять некоторые устаревшие патчи, но я не тестировал, что он делает. MS утверждает:

Windows 10 и Windows Server 2016 автоматически уменьшают размер папки WinSxS, используя методы, аналогичные описанным в этой теме, а также внутренние процессы, такие как удаление и удаление пакетов с компонентами, которые были заменены другими компонентами с новыми версиями. Предыдущие версии некоторых компонентов хранятся в системе в течение некоторого времени, позволяя вам при необходимости выполнить откат. После того, как это время истечет, эти старые компоненты автоматически удаляются из установки. […]

Использование параметра /StartComponentCleanup Dism.exe в запущенной версии Windows 10 дает аналогичные результаты, что и запуск задачи StartComponentCleanup в Планировщике заданий, за исключением того, что предыдущие версии обновленных компонентов будут немедленно удалены (без 30-дневного периода) и у вас не будет ограничения времени на 1 час. […]

Использование параметра /ResetBase с параметром /StartComponentCleanup DISM.exe в работающей версии Windows 10 удаляет все устаревшие версии каждого компонента в хранилище компонентов. […] Все существующие сервисные пакеты и обновления не могут быть удалены после завершения этой команды. Это не будет препятствовать удалению будущих сервисных пакетов или обновлений.

Также стоит отметить, что кто-то другой на том же форуме MDL написал /ResetBase эквивалент для Win 7. Я его не тестировал. Последний хак выглядит намного сложнее, чем упомянутый скрипт в сообщении ОП. Он также поставляется с полным комплектом dismcore.dll и т.д. dll из (к настоящему времени) старой версии Win 7, так что я скептически настроен, что он хорошо работает с последними обслуживающими стеками.

Ответ или решение

Очистка папки Windows\Installer: Поддержика IT-экспертов

Введение

Работа с папкой Windows\Installer — важный аспект управления системным пространством на вашем устройстве. Одна из актуальных задач — очистка устаревших и заменяющих друг друга MSi и MSP файлов, которые могут занимать значительный объем диска. Здесь представлен обзор обсуждаемого скрипта включая потенциальные последствия и выгоды.

Скрипт для очистки: Особенности и потенциал

Ссылка на исходный скрипт из форума MDL предлагает автоматизированное решение для очистки папки %windir%\Installer. Некоторые пользователи отметили, что скрипт освобождает значительное количество пространства, удаляя старые обновления для продуктов, таких как Office, но создает большие лог-файлы, которые также следует учитывать.

Преимущества:

  1. Освобождение места: Как показывают отзывы, существенное уменьшение используемого дискового пространства может быть достигнуто: примерно 6-9 ГБ.
  2. Стабильность: Предварительные испытания показывают, что нет заметного влияния на функционирование ОС и приложений после выполнения скрипта.

Потенциальные риски:

  1. Время выполнения: На старых или медленных системах скрипт может выполняться довольно долго — более двух часов на некотором оборудовании.
  2. Создание логов: Логи могут занимать существенное пространство, что стоит учесть, особенно если вы ограничены в свободном месте.
  3. Сложности с удалением: В случае некорректно разработанных патчей, удаление промежуточных обновлений может потенциально привести к непредвиденным зависимостям в программных продуктах.

Возможные последствия удаления старых патчей

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

Альтернативные методы

Существует несколько встроенных инструментов Windows, таких как Disk Cleanup (винда 7) и DISM (винда 10), которые помогают управлять содержимым SxS и обновлениями компонентов. Стоит рассмотреть их в дополнение или как альтернативу рассмотренному скрипту.

Заключение

Подход к очистке папки Windows\Installer должен быть тщательно продуман. Несмотря на то, что выгода от освобождения пространства очевидна, необходимо взвесить возможные риски, особенно если система или установленные приложения в дальнейшем требуют отката обновлений. Консультация с IT-специалистами может помочь в выработке наиболее безопасного и эффективного подхода.

Оцените материал
Добавить комментарий

Капча загружается...