Мусор в реестре - правда жизни пользователя Windows

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

Раньше программисты сплошь и рядом писали собственные алгоритмы установки приложений, пытаясь сэкономить многие сотни долларов на коммерческих наборах инструментов для разработки программ установки. Естественно, основное внимание уделялось собственно установке программ. Действительно, работа над программой удаления - это в каком-то смысле повод признаться себе в том, что созданная программа, возможно, не настолько полезна и надежна, чтобы стать неотъемлемым компонентом пользовательской системы. В результате процесс удаления программ зачастую проводится без должного тщания, оставляя за собой следы в реестре и в файловой системе. Несколько сот килобайт ненужных разделов и значений реестра не оказывают на производительность системы сколько-нибудь заметного воздействия, но программы очистки реестра, тем не менее, могут с полным правом занимать место в арсенале рачительного системного администратора.

Технология установки программ претерпела существенные изменения, и теперь программистам доступны десятки надежных недорогих или вообще бесплатных комплектов инструментов для разработки программ установки - как по традиционной процедуре, так и посредством пакета установщика Windows (Windows Installer Package, MSI). Раньше мне казалось, что в таких условиях в реестре перестанет появляться мусор, а следовательно, исчезнет всякая потребность в программах его очистки. И все же один из примеров устранения неполадок, о которых мы с Дэйвом рассказываем на семинарах по внутреннему устройству Windows, заставил меня осознать, что даже лучшие из программ удаления, получившие от корпорации Майкрософт право размещения логотипа Windows, зачастую оставляют в реестре следы давно удаленных приложений.

В примере, о котором я говорю, пользователь обнаруживает, что обозреватель Internet Explorer (IE) зависает при запуске, если подключение к Интернету не было предварительно установлено при помощи программы набора номера, предоставленной поставщиком услуг Интернета. Выполнив трассировку зависавшего обозревателя при помощи программы Regmon, пользователь обнаружил ссылки на программу набора номера своего предыдущего поставщика услуг Интернета в разделе “RAS Phonebook” ветви HKEY_CURRENT_USER (HKCU), предназначенной для хранения личных параметров. После удаления старых значений реестра ситуация нормализовалась - запуск обозревателя IE, как и ожидалось, начал сопровождаться открытием программы набора номера от нового поставщика услуг Интернета.

Последующее изучение вопроса заставило меня предположить, что пользователь вручную настроил запись телефонной книги RAS, а при смене поставщика услуг Интернета забыл ее обновить. Но тот факт, что раздел, послуживший в этом примере источником проблемы, находился в пользовательской части реестра, заставил меня призадуматься. Даже если бы старая программа набора номера создала запись в телефонной книге автоматически, то в случае удаления этой программы из другой учетной записи в наследство пользователю осталась бы некорректная конфигурация обозревателя IE. Дело в том, что программы удаления, как правило, удаляют параметры приложения системного уровня из ветви реестра HKEY_LOCAL_MACHINE и параметры пользователя, инициировавшего удаление, из ветви HKEY_CURRENT_USER. Но что при этом происходит с личными параметрами других пользователей, работавших с приложением? Совершенно верно - в реестре появляется мусор. Не исключено также, что невостребованные пользовательские параметры остаются в папках Application Data каталогов \Documents and Settings других пользователей. Итак, удаление приложения можно считать полным только в том случае, если его инициирует единственный пользователь, работавший с приложением.

Проверить это мое утверждение просто - попробуйте установить и поработать с любым приложением, сохраняющим в личные параметры в реестре (на роль подопытного вполне подойдет программа Winzip). Войдите в систему из другой учетной записи и поработайте с приложением еще некоторое время. Затем удалите приложение из одной учетной записи, войдите в систему из другой, и вы увидите, что параметры пользователя остались в целости и сохранности (для справки, программа Winzip хранит параметры в ветви HKCU\Software\Nico Mak Computing\WinZip).

Решить эту проблему разработчики программы удаления могли бы при помощи API-интерфейса Windows LoadUserProfile, который позволяет загрузить все имеющиеся в системе профили согласно списку в разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList и провести в них поиск параметров удаляемого приложения. К сожалению, при таком подходе разрешения реестра, скорее всего, не позволят пользователю, инициировавшему удаление программы, удалить разделы, относящиеся к другим профилям. Но даже если бы разрешения позволяли это сделать, проблема оставалась бы актуальной для пользователей доменов с перемещаемыми профилями. Такие профили оказываются недоступными для программ удаления в локальном режиме.

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

Исходная запись создана пользователем Mark Russinovich 02.10.05 в 04:09:00
Запись перенесена из блога Sysinternals.com/Blog