Одной из распространенной причиной исчерпания свободного места на системном диске может быть системная папка
C:\Windows\Installer
. В моем случае при анализе использования диска с помощью утилиты WinDirStat, оказалось, что ее размер вырос почти до 100 Гб. В этой статье мы расскажем для чего нужно папка C:\Windows\Installer, можно ли вручную удалять хранящиеся в ней файлы и как правильно ее очистить.
Для чего нужна папка Windows Installer?
Системная папка C:\Windows\Installer хранит кешированные копии установщиков приложений формата *.MSI и пакетов обновления для них (*.MSP). Когда пользователь запускает установку MSI программы, запускается служба установщика Windows Installer (
msiserver
). Служба msiserver копирует исходный *.MSI файл установщика в скрытую системную папку
%windir%\Installer
, переименовывая оригинальное имя файла в произвольную последовательность символов, оставляя расширение *.msi. Например,
C:\Windows\Installer\25c18e0.msi
.

Благодаря наличию резервной копии установочного MSI файла, пользователь может безопасно удалить, восстановить, или исправить установленную в Windows программу, даже если оригинальные установочные файлы были удалены. Также Windows Installer автоматически использует кэшированные MSI файлы для исправления программы, если поврежден или удален какой-то из важных файлов.
Соответственно, при каждой установке или обновлении приложения (которое часто выполняется в фоне, без взаимодействия с пользователем), в каталоге
%windir%\Installer
будут появляются новые файлы. Поэтому размер папки постоянно увеличивается.
При штатном удалении программы через панель Settings -> Apps -> Installed Apps (
ms-settings:appsfeatures
), классическую панель удаления программ
appwiz.cpl
или из командной строки с помощью
msiexec
, сохраненные MSI и MSP файлы в папке C:\Windows\Installer удаляются автоматически.
Если кэшированный MSI файл удален, при попытке деинсталлировать программу из панели управления появится окно Windows Installer, предлагающее указать путь к оригинальному MSI файлу.
The feature you are trying to use in on a network resource that is unavailable.

Таким образом, если вы вручную удалите какие-то файлы из каталога C:\Windows\Installer, вы не сможете корректно удалить установленные программы, если у вас не осталось оригинальных установочных файлов. Поэтому первая рекомендация – не нужно бездумно удалять файлы из этой папки.
Правильная очистка файлов в папке Windows Installer
Со временем в папке
%windir%\Installer
может накопиться большое количество файлов, которые фактически не связаны с установленными в системы программами. Например, если установка или удаление программы было прервано, для удаления использовался альтернативный (или собственный) деинсталятор, или остались версии установочных MSI файлов от предыдущих версий приложения (после его последовательного автоматического обновления).
Главная проблема – понять к какому приложению относится тот или иной установочный файл. Но сделать это сложно, т.к. все установочные файлы в каталоге C:\Windows\Installer переименованы в случайные имена вида 12acb.msi.
Чтобы упростить идентификацию MSI/MSP файлов в этой папке, вы можете включить отображение метаданных этих файлов прямо в проводнике.
- Перейдите в папку
%windir%\Installer - Переключитесь в режим представления Details (Таблица)
- Щелкните правой клавише по заголовку любой колонки и выберите More.
- Включите отображение следующих полей Authors (разработчик), и Subject (именно в этом поле чаще всего содержится полное имя приложения).

- Теперь у большинства MSI файлов будет отображаться имя программы, к которой этот файл относится.

Если вы понимаете, что это приложение уже удалено или обновлена версия на более новую, вы можете безопасно вручную удалить относящиеся к нему MSI и MSP файлы в этой папке.
Поиск потерянных MSI и MSP файлов в каталоге Windows Installer с помощью PowerShell
Можно автоматизировать поиск потерянных MSI/MSP файлов в директоре C:\Windows\Installer с помощью PowerShell скрипта.
Идея заключаете в том, что все зарегистрированные программы можно извлечь из реестра. Можно просто перебрать ветки в
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData
. Для каждой программы в значении LocalPackage указан путь к локально кэшированному MSI-пакету.

Но проще запросить список кешированных пакетов, зарегистрированных в системе, у самой службы Windows Installer. Полученный список файлов нужно сравнить с файлами, которые фактически хранятся в папке C:\Windows\Installer. Если файл хранится на диске, но отсутствует в базе Windows Installer, очевидно, его можно считать потерянным.
Вот готовый PowerShell скрипт, который реализует описанный алгоритм и выводит (только выводит, без удаления!) потерянные .msi и .msp файлы в папке C:\Windows\Installer, которые не связаны с зарегистрированными приложениями службы msiserver.
https://github.com/winadm/posh/blob/master/Desktop/Find-OrphanedWindowsInstallerFiles.ps1
Скачайте скрипт на компьютер, разрешите запуск PowerShell скриптов в текущей сессии и запустите его:
Set-ExecutionPolicy Unrestricted -Scope Process
.\Find-OrphanedInstallerFiles.ps1

Перед вами потенциальный список файлов к удалению (но все же, сначала рекомендуем просто перенести указанные файл на другой диск).
По аналогичному принципу работает сторонняя графическая утилита PatchCleaner ( https://www.homedev.com.au/free/patchcleaner), которая также позволят просканировать каталогу Installer и найти осиротевшие MSI/MSP пакеты
Утилита PatchCleaner позволяет переместить (рекомендуется) или сразу удалить найденные MSI файл для быстрой очистки папки c:\Windows\Installer.

Перенос папки Windows\Installer на другой диск
Если все MSI установщики в папке Installer для вас важны и нужны, а место на системном диске недостаточно, можно переместить ее содержимое на другой диск и создать символическую ссылку с исходного каталога на новый.
Можно выполнить перенос их командной строки.
Перемещаем содержимое папки на диск D (с копированием NTFS разрешений):
robocopy C:\Windows\Installer D:\Windows\Installer /E /MOVE /COPYALL /DCOPY:DAT /XJ
Удаляем исходный каталог:
rmdir C:\Windows\Installer
Создаем символическую ссылку на новую папку:
mklink /J C:\Windows\Installer D:\Windows\Installer
Перезагрузите копьютер и попробуйте установить/удалить любую программу, чтобы проверить корректность работы службы Windows Installer.

