Остерегайтесь кривых деинсталляторов

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Остерегайтесь кривых деинсталляторов

Сообщение Хакер » 11.05.2012 (Пт) 16:46

Я на днях переустановил систему (кто в теме: на 160-ку с терабайтника). Каждый раз, когда мне нужно переустанавливать ОС, я интегрирую вышедшие с прошлого раза hotfix-ы в дистрибутив, прежде чем записывать его диск. Во-первых, чтобы свежеустановленная система не качала пачку обновлений с нуля, а во-вторых, чтобы иметь диск с самой актуальной (в плане обновлений безопасности) версией Windows.

Пропатчил дистрибутив, записал на диск, установил систему, давай устанавливать софт. Софта достаточно много, установка заняла чуть ли не целый день.

Установил основную часть — давай обустраивать, как говорится, workspace. Как вы могли уже где-нибудь читать на форуме, я люблю создавать свою собственную панель инструментов
Изображение
и прикреплять её к верхней части экрана, и помещать в этот тулбар иконки всех часто-используемых инструментов.

И вот, создаю панель инструментов на базе папки, и пытаюсь её вырвать из панели задач и прилепить к верхней границе экрана.
А она — ни в какую. Двигать тулбары в пределах панели задач получается легко. А вырвать тулбар за пределы панели задач — вообще не получается. Мучался минут 20. Пытался делать это резко, плавно, нажимая Ctrl, Alt, Shift. Брался за разные места. Пробовал разные траектории. Думал: может быть я забыл. Ибо я где-то год сидел без подобной полосы.

В чём причина? Каких только версий у меня не было, даже самые радикальные: что MS выпустили апдейт для explorer.exe, в котором эту возможность просто убрали. И игрался я с групповыми политиками. Там есть вот такие ключи, но они ничего не меняли:
Изображение
кроме как вида значка мышки в процессе перетаскивания тулбара на нужное место.

Тогда я решил действовать последовательно. Новый дистрибутив отличался от старого только двумя вещами:
  1. Встроенная учётка «Администратор» была переименована в «root» (ибо меня напрягает каждый раз в командной строке писать runas /user:Администратор somecommand, переключая два раза раскладку, а теперь я могу писать runas /user:root somecmd.
  2. Были интегрированы непосредственно в дистрибутив все самые последние обновления на 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 люди наблюдают такой же баг.

Возьмите на заметку. Деинсталлятор может удалить лишнее.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 11.05.2012 (Пт) 19:52

Хакер писал(а):Возьмите на заметку. Деинсталлятор может удалить лишнее.

Именно поэтому я крайне редко их использую :)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Остерегайтесь кривых деинсталляторов

Сообщение BV » 14.05.2012 (Пн) 13:01

А я редко использую инсталляторы. Если у ПО есть качественная portable-версия, я предпочту её официальной установке. Слишком долго занимался чисткой реестра и системных папок за инсталляторами
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Остерегайтесь кривых деинсталляторов

Сообщение Хакер » 14.05.2012 (Пн) 13:02

А я ненавижу Portable-версии в принципе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Остерегайтесь кривых деинсталляторов

Сообщение ger_kar » 14.05.2012 (Пн) 17:03

Хакер писал(а):А я ненавижу Portable-версии в принципе.
А чем вызвана сия нелюбовь? Я тоже например люблю Portable-версии. Во первых очень удобно, во вторых они позволяют избавиться от этого:
Хакер писал(а):установил систему, давай устанавливать софт. Софта достаточно много, установка заняла чуть ли не целый день
И избавляют хоть и не от всего но от части этого геммора это точно.
Бороться и искать, найти и перепрятать

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Остерегайтесь кривых деинсталляторов

Сообщение Proxy » 14.05.2012 (Пн) 19:02

Portable софт никогда не интегрируется в проводник, не запускает необходимые службы заранее, не ассоциирует расширения файлов автоматически, крайне редкий portable софт обновляется автоматически, при необходимости деинсталляции приходится вручную возвращать на исходные всё, что было вручную изменено для удобства использования (а за этим уследить ещё сложнее), версии в portable отстают от релизов стандартных версий (а это уже угроза безопасности).
ИМХО это добро стоит использовать только там, где в этом есть хоть какой-то смысл.
Follow the white rabbit.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Остерегайтесь кривых деинсталляторов

Сообщение BV » 20.05.2012 (Вс) 12:03

Proxy писал(а):Portable софт никогда не интегрируется в проводник, не запускает необходимые службы заранее, не ассоциирует расширения файлов автоматически

Интегрируется, запускает, ассоциирует

Proxy писал(а):крайне редкий portable софт обновляется автоматически

Некоторые разработчики (особенно часто я это замечаю у opensource-проектов) выпускают две версии -- инсталлятором и в архиве
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.05.2012 (Вс) 16:44

BV писал(а):
Proxy писал(а):крайне редкий portable софт обновляется автоматически

Некоторые разработчики (особенно часто я это замечаю у opensource-проектов) выпускают две версии -- инсталлятором и в архиве

Имелось в виду автоматическое обновление, скорее всего.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Остерегайтесь кривых деинсталляторов

Сообщение ger_kar » 20.05.2012 (Вс) 16:47

Qwertiy писал(а):Имелось в виду автоматическое обновление, скорее всего
А вообще насколько автоматическое обновление зависит от того какая версия портейбл или установочная, по моему вообще никак.
Бороться и искать, найти и перепрятать

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Остерегайтесь кривых деинсталляторов

Сообщение Proxy » 20.05.2012 (Вс) 16:50

BV писал(а):Интегрируется, запускает, ассоциирует

Хм, но во-первых не встречал такого, во-вторых что будет, когда портативное приложение таки станет недоступно (носитель недоступен)? Вручную править ассоциации и вычищать прочий мусор из реестра (ключ автозапуска и т.п)? Но ведь это противоречит принципу портативности, не так ли?
Qwertiy писал(а):Имелось в виду автоматическое обновление, скорее всего.

Да
Follow the white rabbit.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.05.2012 (Вс) 17:14

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

Ну настройки-то никто не выкидывает. Просто они по умолчанию должны быть выключены. Если руками включил, то руками и чистишь (ну или просто отключаешь) :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Остерегайтесь кривых деинсталляторов

Сообщение ger_kar » 20.05.2012 (Вс) 17:30

Proxy писал(а):Хм, но во-первых не встречал такого
Opera, Ollydbg например, да и куча другого софта. И ты его встречал, и не раз, просто не придавал этому значения :)
Proxy писал(а):... во-вторых что будет, когда портативное приложение таки станет недоступно (носитель недоступен)?
Ну носитель с таким же успехом может стать недоступным и с другими приложениями, ассоциации как правило в таких приложениях опциональны, и если приложения на флешке, то нефиг заниматься ассоциациями. Зато как удобно, когда такие приложения хранятся в папке Program на диске D: и прекрасно работают со всеми своми прежними настройками, даже после пере установки системы. Не надо париться с установкой и настройкой десятка другого программулин. Что касается мусора в реестре, то от установочного софта его в разы больше, и опять же при деинсталяции, все равно как правило часть этого мусора остается, редко когда приложение деинсталируется полностью без остатков, а в случае из-за которого тема возникла, вообще вопиющий. Конечно так бывает не всегда и такая кривизна встречается редко, но более мелкие нюансы с деинсталяцией возникают регулярно. Конечно и портативные версии не идеальны и намусорить тоже могут, но идеального вообще ничего не бывает. Но в целом портативные версии гораздо удобнее. А чтобы не чистить систему у меня на сей случай есть образ, раскатать из которого систему можно за 10 минут максимум, включая перезагрузки. Откатил и система свежая, а в случае с портебл приложениями еще и устанавливать и настраивать ничего не надо.
Бороться и искать, найти и перепрятать


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 22

    TopList