Windows 8, олицетворяющая собой видение Редмондом современной операционной системы, на мой скромный взгляд - явление несколько противоречивое. Умело сочетая в себе не сочетаемое, она заставляет лавировать пользователя между плоским, словно неудачная шутка, "современным" интерфейсом и традиционным рабочим столом. Впрочем, ко всему привыкаешь, и лично я немного пообвыкся с этими новомодными причудами. Однако, есть в этой системе одна вещь, с которой у меня так и не сложилось толерантного взаимодействия. Это - автоматическое закрепление ярлыков только что установленных приложений. Несмотря на то, что я пользуюсь преимущественно "переносным" софтом where available, стоит поставить какую-нибудь Visual Studio - и удачно настроенный начальный экран засран настолько, что мне совершенно недосуг снова его разгребать. Я вооружился Sysinternals Proccess Monitor, и попытался выяснить, что можно сделать с этим досадным автозакреплением.
Великолепное творение гениального Марка Руссиновича и переписка с Вадимом Стеркиным привели меня к следующему выводу:
Вся информация о закрепленных приложениях и плитках для текущего пользователя хранится в файле
%localappdata%\Microsoft\Windows\AppsFolder.itemdata-ms
Сам по себе этот файл - бинарный, документацию на его формат мне найти не удалось.
Если этот файл по каким-либо причинам отсутствует (например, пользователь взял и удалил его), система не сильно переживает этому поводу и создает новый, с набором метроплиток по умолчанию - вы видите этот набор при первом входе в систему.
Процесс закрепления ярлыка на начальном экране выглядит следующим образом:
- Windows 8 создает резервную копию текущего файла с именем AppsFolder.itemdata-ms.bak рядом с имеющимся, в этой же папке.
- Затем здесь же создается файл-маркер AppsFolder.itemdata-ms.lock, который как бы говорит - пожалуйста, подождите, ведутся строительно-монтажные работы.
- Система создает точную копию текущего файла AppsFolder.itemdata-ms.new и дописывает в него информацию о том, что закрепил пользователь, либо то, что решила закрепить система за пользователя во время установки приложения.
- Если всё прошло успешно, система копирует файл AppsFolder.itemdata-ms.new в AppsFolder.itemdata-ms с заменой, удаляет AppsFolder.itemdata-ms.new и маркер AppsFolder.itemdata-ms.lock
- Если что-то пошло не так, система удалит маркер AppsFolder.itemdata-ms.lock и воспользуется файлом резервной копии для отображения плиток и закрепленных ярлыков.
Первое, что я сделал - обратил свой баттхерт на файл AppsFolder.itemdata-ms. Вадим, которого я втянул в эту порнографию, предложил поставить на файл атрибут "только чтение", тем самым запретив системе вносить в него изменения.
Однако, как оказалось, этот трюк годится только для случая, когда на Начальном Экране закрепляется плитка Метро-приложения. В этом случае алгоритм закрепления минует чехарду с файлом AppsFolder.itemdata-ms.new, и производится прямая правка файла AppsFolder.itemdata-ms. Так как файл у нас стал только для чтения, то закрепления не происходило.
Однако, если закрепляется обычный ярлык, система тупо трёт AppsFolder.itemdata-ms новым экземпляром, и плевать она хотела на какие-то там атрибуты. Поэтому следующее, что пришло мне в голову, - это лишение Проводника прав доступа к файлу AppsFolder.itemdata-ms на уровне NTFS.
Идея, безусловно, была лучше жонглирования атрибутом "только чтение", однако имела довольно адовый побочный эффект - если перезапустить Проводник с залоченным файлом, система долго пыталась прочитать злосчастный файл, при этом Начальный экран оставался пустым,а затем, так и не прочитав файл, система использовала файл AppsFolder.itemdata-ms.bak, если он имелся, а если нет - то просто выводила умолчальный набор плиток.
Конечно, это никуда не годилось. К тому же, у меня на панели задач закреплен батник, перезапускающий Проводник, и мне не хотелось бы его случайно нажать, потеряв при этом всё, что я поналепил на Начальный экран.
Мне пришла в голову мысль блокировать не сам файл данных, а создавать и блокировать маркерный файл AppsFolder.itemdata-ms.lock. И действительно, видя, что в данный момент якобы выполняется закрепление ярлыков, система не будет закреплять новый ярлык.
БИНГО! Это сработало, и я добился запрета автоматического закрепления ярлыков во время установки приложений в систему. Начальный экран более не захламлялся, что не могло не радовать.
Однако, ложка дегтя таки нашлась. Её обнаружил Вадим. Если при созданном и заблокированном файле AppsFolder.itemdata-ms.lock выполнить команду контекстного меню "Закрепить на начальном экране", то, как только вы снимите блокировку правами NTFS и удалите маркер, система сразу создаст закрепленный ярлык. Очевидно, в недрах системы где-то существует очередь на закрепление ярлыков, которая продвигается во время пересоздания маркера блокировки. Я пока не обнаружил, каким образом работает эта очередь, и не факт, что у меня хватит на это квалификации. Тем не менее, я оформил работающее решение, о нем - чуть позже.
Итак, подведем итоги
Чтобы запретить системе на какое-то время закреплять ярлыки на Начальном экране, нужно
- Создать файл-маркер %localappdata%\Microsoft\Windows\AppsFolder.itemdata-ms.lock
- Удалить у него все разрешения NTFS, я использую пустой набор прав:
- Установить необходимый софт
- Удалить файл AppsFolder.itemdata-ms.lock
- Закрепить на Начальном экране то, что ВЫ сочтете нужным, а не всё подряд.
Согласитесь, довольно утомительная процедура! Я сам слишком ленив, чтобы проделывать подобное каждый раз, когда я что-то ставлю из ПО.
Поэтому я потратил немного своей субботней ночи и написал утилитку, автоматизирующую процесс.
Вы с ней уже знакомы по предыдущей статье, это AutoPin Controller.
Утилита AutoPin Controller выполняет все вышеописанные пункты одним нажатием и снабжена индикатором статуса блокировки. Она предполагает, что вы:
- Блокируете функцию закрепления
- Ставите нужные вам приложения - в это время на начальный экран они не попадают.
- Разблокируете функцию закрепления ярлыков на начальном экране
- Закрепляете только те ярлыки, которыми вы намерены пользоваться.
В качестве приятного бонуса программа позволяет вам "сбросить" начальный экран в состояние первого входа одним кликом, попутно избавившись от всего хлама, который туда сам закрепился.
Отмечу, что программа также управляет пунктом меню Pin to Start, дабы нерадивый пользователь не наступил на грабли очереди на закрепление. Костыль, конечно, но ничего лучше я пока предложить не могу. Я работаю над этим.
Что ж, Майкрософт имеет весьма своеобразное видение того, как пользователь должен взаимодействовать с новой системой. Я полагаю, что для новичка, видящего систему в первый раз, совершенно неочевидно, что у начального экрана есть ещё режим Ctrl+Tab/All apps, и именно для такого новичка и закрепляется всё, что установлено. Но мне искренне непонятно, что помешало сделать эту функциональность отключаемой.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Замечательная софтина, замечательная идея, Серёга, ты настоящий следопыт:)
А когда начнутся статьи о серверной версии оси? они её превратили в большой тач-пизец..
Я про серверные ОС не пишу. Это прерогатива Димы Буланова.
Сергей, а что мешает сделать резервную копию файла AppsFolder.itemdata-ms до установки, а после установки новой программы откатить этот файл? Это можно даже в виде приложения оформить, которое будет делать резервную копию и затем восстанавливать ее.
В теории, наверно ничего не мешает. Надо попробовать. Однако, очевидно, что следует ещё и удалять файл AppsFolder.itemdata-ms.bak, созданный системой.
Если никаких проверок на временной штамп для этого файла нет, — должно сработать.
Лично для меня такой проблемы не существует. Новые приложения отображаются в конце и сразу-же можно выделяя окрепить лишнее, а нужный ярлык перетащить туда, куда надо(в нужный радздел, на видное место)
А вот чего не хватает, дак это возможности закреплять батники на старт-экране.