Пропатчил дистрибутив, записал на диск, установил систему, давай устанавливать софт. Софта достаточно много, установка заняла чуть ли не целый день.
Установил основную часть — давай обустраивать, как говорится, workspace. Как вы могли уже где-нибудь читать на форуме, я люблю создавать свою собственную панель инструментов
и прикреплять её к верхней части экрана, и помещать в этот тулбар иконки всех часто-используемых инструментов.
И вот, создаю панель инструментов на базе папки, и пытаюсь её вырвать из панели задач и прилепить к верхней границе экрана.
А она — ни в какую. Двигать тулбары в пределах панели задач получается легко. А вырвать тулбар за пределы панели задач — вообще не получается. Мучался минут 20. Пытался делать это резко, плавно, нажимая Ctrl, Alt, Shift. Брался за разные места. Пробовал разные траектории. Думал: может быть я забыл. Ибо я где-то год сидел без подобной полосы.
В чём причина? Каких только версий у меня не было, даже самые радикальные: что MS выпустили апдейт для explorer.exe, в котором эту возможность просто убрали. И игрался я с групповыми политиками. Там есть вот такие ключи, но они ничего не меняли:
кроме как вида значка мышки в процессе перетаскивания тулбара на нужное место.
Тогда я решил действовать последовательно. Новый дистрибутив отличался от старого только двумя вещами:
- Встроенная учётка «Администратор» была переименована в «root» (ибо меня напрягает каждый раз в командной строке писать runas /user:Администратор somecommand, переключая два раза раскладку, а теперь я могу писать runas /user:root somecmd.
- Были интегрированы непосредственно в дистрибутив все самые последние обновления на 9 мая 2012 года.
Я решил проверить, будет ли неработающая возможность работать в оставшейся живой предыдущей установленной системе.
Проверил: там всё прекрасно работает.
В предыдущей системе у меня была установлена виртуальная машина Oracle VirtualBox (рекомендую, кстати), на которой я обкатывал пропатченный дистрибутив перед настоящей установкой. Я проверил свежеустановленную систему, установленную на виртуальной машине, и в ней тоже всё работало. Значит дело точно не в кривости собранного мною дистрибутиво, не в обновлениях, MS уже тут точно не причём.
Тогда я предположил, что возможно iso-образ криво записался на DVDR-болванку. Очень даже может быть: ведь мой новый CD-привод Пионер с самого начала мне не понравился. Работающая система на виртуалке (где всё было гладко) устанавливалась из установочного iso-образа, а реальная система (где всё было не гладко) устанавливалась с реального DVDR-диска.
Я создал новую виртуальную машину, установил на неё систему уже не из iso-образа, в с физического диска (VirtualBox позволяет «пробросить» физический CD-привод в эмулируемую виртуальную машину). Установил, проверил — всё отлично работает.
Значит дело не в апдейтах, не в криво собравшемся дистрибутиве, не в криво записавшемся на диск дистрибутиве. А в конкретной системе.
Тогда я скачал Process Monitor, настроил фильтры, и стал смотреть, что делает explorer.exe при моей попытке выдернуть тулбар из таскбара и прилепить его к границе экрана. Там, конечно, было много чего, но ключевой момент вот:
HKEY_CLASS_ROOTS/Interfaces — это место, где регистрируются все COM-интерфейсы. А {0000000c-0000-0000-C000-000000000046} — это явно IID какого-то базового встроенного COM-интерфейс, ибо такие IID-ы Microsoft присваивал самым первым придумываемым интерфейсам: 46 в конце, и меняющееся число в первой части.
В общем, {0000000c-0000-0000-C000-000000000046} — это IID базового COM-интерфейса IStream. И этот базовый интерфейс IStream каким-то пока непонятным образом исчез из системы. Словно был разрегистрирован.
Понятное дело, что информация о нём в реестре есть сразу же после установки системы. Но кто-то её оттуда убрал. Кто?
Первым делом я восстановил в реестре все ключи, относящиеся к интерфейсу IStream. Ура! Возможность разместить созданную пользователем панель инструментов в произвольном месте вернулась. Кто не понял: explorer использует для хранения всяческой своей информации COM-стримы. В частности, thumbs.db и, как теперь знаем, информация о местоположении пользовательских панелей инструментов.
Осталось выяснить, какая же сволочь снесла ключи реестра, относящиеся к IStream?
Я подумал: всё, что я вчера делал, это устанавливал программы. Сомнительно, что установка программ привела бы к удалению ключа реестра. Я даже представить себе не могу, как нужно было накосячить в коде, чтобы установщик нового ПО удалил информацию о базовом COM-интерфейсе из реестра.
И тут я вспомнил, что вчера я сначала установил SnagIt 7.0.0 — который оказался слишком недоделанной версией моего любимого SnagIt-а. Потом я установил SnagIt 8.2.1 — который оказался слишком переделанной версией моего любимого SnatIt-а. Потом я понял, что самая лучшая версия SnagIt-а, та, которой я пользовался раньше, и та, которую я хочу видеть сейчас, это версия 7.2.5. Заметьте себе, если собираетесь использовать.
Для справки SnagIt — это программа, в которой я рисую все те красивые картинки со стрелочками (такие, сякие, эдакие) которые я периодически выкладываю на форуме.
Так вот, после того, как я нашёл самую кошерную версию (7.2.5), я удалил лишние (7-ку и 8-ку). А вот вероятность того, что при деинсталляции какого-то ПО в силу наличия бага в деинсталляторе, по ошибке был удалён ключ реестра, относящийся в IStream — несколько ваше, чем вероятность, что подобное произошло при установке.
Я стал проверять: взял самую последнуюю виртуальную машину, на которую только что установил ОС прямо с физической DVDR-ки, и попытался на ней установить и сразу же деинсталлировать обе версии SnagIt-а.
Точно!
При деинстялляции SnagIt 8.2.1 деинсталлятор какого-то чёрта удаляет из реестра информацию о COM-интерфейсе IStream. Кто бы мог подумать!
Как потом оказалось, это не единственное ПО, в котором наблюдается такой баг: после деинсталляции Nero-7 люди наблюдают такой же баг.
Возьмите на заметку. Деинсталлятор может удалить лишнее.