Загадочный каталог “%SystemRoot%\Installer”.
Продолжаем начатое ранее расследование. Зачем нужен каталог “%SystemRoot%\Installer”? Поверхностное гугление показало, что я далеко не первый, кто задает такой вопрос и не получает ответ. Пришлось выяснять самому.
В этом каталоге можно найти следующее:
- Некий “patch cache” (если судить по имени каталога “$PatchCache$”). Непонятно что это такое. В моем случае этом каталоге есть подкаталог “Managed”. Это может означать как то, что каталог имеет отношение к .NET так и то, что может существовать и другой подкаталог “Unmanaged”;
- Иконки, которые хранятся в произвольно именованных файлах в каталогах с именами вида “{CLSID}”. Часть иконок представлена .ico файлами, часть упакована в бинарные файлы в формате PE;
- Много .msi и .msp файлов с именами в виде шестнадцатеричных чисел;
- Несколько .tmp и других “случайных” файлов. Похоже, что этот каталог по совместительству может использоваться в качестве каталога временных файлов во время инсталляции.
Часть странностей с иконками можно объяснить статьей из MSDN Icon Table:
Icon files that are associated strictly with file extensions or CLSIDs can have any extension, such as .ico. However, Icon files that are associated with shortcuts must be in the EXE binary format and must be named such that their extension matches the extension of the target. The shortcut will not work if this rule is not followed. For example, if a shortcut is to point to a resource having the key file Red.bar, then the icon file must also have the extension .bar. Multiple icons can be stuffed into the same icon file as long as all of the target files have the same extension.
В случае если иконка используется для создания ярлыка, расширение файла с иконкой должно совпадать с расширением файла, на который указывает ярлык. Это ограничение связано с механизмом рекламы (Advertisement), используемом для реализации установки по требованию. Если расширения не будут совпадать, то для рекламируемого компонента будет показывается неверное контекстное меню (см. Validation ICE50).
Я попытался создать простую инсталляцию, чтобы посмотреть, как именно иконки попадают в каталог “%SystemRoot%\Installer”. Взяв за основу инсталляцию ShellLib, добавил создание ярлыка в меню Start:
<Product Name='ShellLib x64 1.0' … >
…
<Icon Id="appicon" SourceFile="appicon.ico"/>
…
<File Id='ShellLib64.DLL' …>
<Shortcut
Id="Startmenu_ShellLib64.DLL"
Directory="ProgramMenuDir"
Name="ShellLib64.dll"
LongName="ShellLib64.dll"
WorkingDirectory='INSTALLDIR'
Icon="appicon"
/>
</File>
…
После установки “appicon.ico” нашелся в каталоге “%APPDATA%\Microsoft\Installer\{619B4162-1586-4FEE-B4BC-0A069B3CA9DA} ”. Из этого можно сделать выводы что:
- во-первых, per-user инсталляции используют пользовательский каталог “%APPDATA%\Microsoft\Installer”;
- во-вторых, в интересующий нас каталог иконки попадают из таблицы иконок (Icon Table) в .msi или её WiX эквивалента – списка элементов Icon.
В качестве файла иконки можно указать .exe, .dll или любой другой файл в PE формате:
<Icon Id="appicon" SourceFile="appicon.exe" />
В этом случае ссылка на иконку должна дополнительно включать индекс иконки:
<Shortcut … Icon="appicon" IconIndex=”1” />
Более того, в качестве файла иконки можно указать любой файл. Windows Installer просто копирует указанный файл в каталог “%SystemRoot%\Installer” без изменений. Это не означает, впрочем, что в качестве хранилища иконок нужно указывать .exe приложения. Обычно для этого используется специально созданный .exe. Чтобы убедиться в этом, достаточно сравнить файл приложения с файлом иконки. Вышеупомянутая статья Icon Table прямо указывает на это:
The icons for shortcuts, file extensions, and CLSIDs must be stored in files that are separate from the target file itself. This is required because the installer should copy only the small icon files to the user’s machine when advertising the resource. A developer of an installation package therefore needs to author separate files containing only the icons. These icon files are then stored as binary data in the Icon table.
Теперь попробуем разобраться с .msi файлами с именами в виде шестнадцатеричных чисел. Первое наблюдение – новый .msi файл добавляется после каждой инсталляции. Декомпиляция с помощью dark.exe подтвердила догадку – .msi файлы в каталоге “%SystemRoot%\Installer” были модифицированными версиями оригинальных файлов из инсталляции. Похоже, что модификация состояла в том, что из модифицированных версий были исключены все установочные файлы (.cab). Однако все custom actions, бинарные файлы и все остальные установки остались на месте. В результате, размер .msi файла может быть довольно велик. Максимальный размер в моем случае – 17 MB.
Зачем нужны эти файлы? Они используются для деинсталляции и восстановления установленных приложений.
Аналогичная ситуация наблюдается с .msp файлами. Если мне не изменяет память, расширение .msp зарезервировано для обновлений. Учитывая, что обновления ставятся каждый месяц, их должно накопиться приличное количество.
В заключение, пройдемся по пунктам “обвинения” (шучу, шучу
):
“c:\WINDOWS\Installer” – если имеет отношения к Add/Remove Programs то весьма косвенное, и единственное применение этого каталога обнаруженное мной в следующем:
ярлычки на программы установленные Windows Installer’ом завянные на вызов конкретных exe файлов ссылаются не на иконки этих exe файлов, а на иконки
К Add/Remove Programs содержимое каталога (.msi и .msp файлы) относится напрямую. При удалении .msi файлов возникают проблемы с деинсталляцией приложений (если верить тому, что находит Гугл).
просто копий тех же exe файлов (адрес см ниже) но с другим именем, которые конечно не могут работать отдельно от библиотек, которых нет рядом (откровенная профанация)
На самом деле, эти файлы должны содержать только иконки, что, впрочем, зависит от разработчика инсталляции. Насколько я могу судить обычно так и есть.
Очень странен сам способ хранения в каталогах файловой системы и без того неэффективной с длинными названиями соответствующими CLSID
Наверно такое трюкачество нужно, чтобы показать, что если вы удалите этот “очень важный” каталог, то у Вас … ОЙ пропадут иконки …
Отдельные копии иконок нужны для того, чтобы работала “установка по требованию”. В этом случае ярлык должен показывать правильную иконку даже в том случае, если файлы рекламируемого компонента не установлены вообще.
получается такой каталог “копий иконок” обычно мегабайт на 300
При большом количестве установленных программ и обновлений системы – да. На моей машине размер каталога 683 MB. Размер “иконочной” части – 7 MB. Количество установленных программ и обновлений – 219 штук (обновлений действительно очень много). По-моему вполне разумные цифры.
Вопросы?
Спасибо за продолжение темы, но целесообразность и эффективность данного подхода хранения информации об инсталлируемой программе для меня остается под большим вопросом.
Существующие методы управления инсталляцией например rpm (*nix) представляются намного более совершенными с большинства точек зрения (проверка зависимостей, централизованность управления, верификация и прочее)
MSI – на этом фоне выглядит крайне странно и непрозрачно.
> Существующие методы управления инсталляцией например rpm (*nix) представляются намного более совершенными с большинства точек зрения (проверка зависимостей, централизованность управления, верификация и прочее)
Очень бы хотелось увидеть аргументированное сравнение функциональности RPM и Windows Installer. Лучше всего feature by feature с подробностями реализации этой функциональности в каждом из инсталляторов. Возьметесь?
> MSI – на этом фоне выглядит крайне странно и непрозрачно.
Давайте прольем на него свет.
Достаточно один раз поставить один из современных дистрибутивов линукс (т.е. не отечественный, а серьезный например SuSe или Mandriva на DVD) и все встанет на свои места, вы сможете увидеть в действии все что я уже перечислил: проверку зависимостей, централизованность управления, верификацию и проверять это Вы будуте на нескольких сотнях программных пакетов с десятками связей, выбирая то и только то, что вам нужно.
что Вы от меня можете хорошего услышать еще? Вот недавно я потратил более трех часов на то чтобы просто доставить на одну из машин c Windows XP компонент к MS Office – редактор формул. Делалось все это не раз, интернет и обновление есть. Но глук на глюке.
Выбираю в инсталяторе офиса “изменить”, появляется чекбоксы напротив названий продуктов и пункта “расширенный выбор” (кажется так называется), ну я ставлю галочку напротив.
Появляется следующее окно визарда, но оно почему-то содержит только уже установленные компоненты (первая вторая третяя попытка), сносим офис, ставим все заново со всеми нужными редакторами формул и вдруг в конце, после установки ворда и прочего, вылетает окно “вставте диск с Windows XP… бла бла для восстановления” но как оказалось винде этот диск не очень то и нужен, она не опознала не один из данных ей носителей с дистрибутивом. После единственного возможного ответа “отмена” установка офиса полностью откатилась (и так несколько попыток)
после пары часов мучений, я думал только о том:
– Kто же это так через одно место в MS все придумывает.
Ясно было что глюки появились после апдейта виндового инсталлера
И как всегда у продуктов MS информативность сообщений близка к нулю. (У IE этот показатель вообще имеет отрицательный знак, сообщения о номере строки с ошибкой как врало семь лет назад так и врет)
Задачу с установкой компонента я решил прибегнув к использованию дистрибутива офиса ручной сборки с полностью автоматической установкой всего.
Я не такой уж и линуксоид, но слишком уж винда халтурно сделана. Боюсь вам удастся разгрести весь этот бардак только переписав большую часть Windows на Net.
Я еще не видел – скажите в Viste теже глупые визарды поиска драйверов в Интеренет, которые никогда ничего не находят уже больше семи лет?
> Достаточно один раз поставить один из современных дистрибутивов линукс …
До недавнего времени мой домашний сервер жил под Fedora 3 и 4. Не SuSe, но, надеюсь, достаточно серьезный. Так что RPM в качестве пользователя дело иметь приходилось. В Windows Installer (WI) есть всё из вышеперечисленного включая проверку зависимостей, верификацию, централизованность управления. В WI нет прямого аналога online repository с кучей RPM и yum. Для обновлений системы используется Windows Update (который завязан на WI). Для централизованной установки и обновления приложений используется SMS.
> что Вы от меня можете хорошего услышать еще?
Я хочу услышать факты, а не эмоции. Серьезно. Я вижу недовольство WI вкупе с непониманием как он работает. Я вижу фразу что RPM лучше. Но я не вижу ни одного факта, приведенного в защиту данного утверждения. Вот например я говорю, что WI лучше, потому что WI отслеживает зависимости на уровне отдельных компонентов. Можно считать что компонент == файл. Это неправда, но как первое приближение сойдет. А RPM делает это только на уровне пакетов. Т.е. WI предоставляет более детальный контроль зависимостей.
Я уверен, что есть масса преимуществ RPM. Вот я и хочу услышать какие именно преимущества RPM имеет.
> Вот недавно я потратил более трех часов на то чтобы просто доставить на одну из машин c Windows XP компонент к MS Office – редактор формул.
У меня однажды полетела база RPM. yum ругался страшными словами. Какая плохая программа! Смешно, не так ли?
> Я еще не видел – скажите в Viste теже глупые визарды поиска драйверов в Интеренет, которые никогда ничего не находят уже больше семи лет?
Я думаю, что они все на месте. Мне просто интересно, а в чём по вашему мнению причина? И, главное, что было бы лучше: убрать эти визарды совсем или оставить их для тех пользователей, которым удавалось ими успешно воспользоваться?
> убрать эти визарды совсем или оставить их для тех пользователей, которым удавалось ими успешно воспользоваться?
А вы когда-нибудь находили какой-нибудь драйвер когда визард собирался искать его в интернет.
НИКОГДА НЕ ЭТО НЕ РАБОТАЛО – прошу прощения – согласен эмоций много фактов мало, но какие могут быть факты о том что это никогда не работало если действительно это никогда не работало, это халтура – видимость работы. Почему? Незнаю.
Поймите просто надоело такое разводилово – позавчера вижу, что на сайте MS появился XML Notepad 2007 – мне такой инструмент нужен, думаю не Altova, зато
вроде минимум того что необходимо по описанию дать может:
запускаю
когда в провинциальной Твери в филиал небольшой оутсорсинговой компании набирали Java программистов, им давали тестовое задание: написать Swing GUI приложение выводящее дерево XML узлов, с возможностью удаления правки и вставки узлов и атрибутов визуально и в коде.
Как Вы думаете, как далеко были бы посланы те, кто для редактирования самого кода xml вызывал бы его открытие в notepad.exe? Кстати такая бредовая идея не посетила не одного претендента. А приложение XML Notepad 2007 красующееся на странице это просто фикция, очередная халтура и как времени не пожалели это анонсировать.
Все! Торжественно обещаю больше не заливать блог, уважаемого мной автора, желчью адресованной в адрес низкого качества отдельных MS продуктов.
Все равно раз пока кто-то не выйдет побороться с MS в открытую, ни одна из известных мне дистрибуций Linux на это не претендует, нам придется использовать и писать ПО под Windows. Жаль только что единицы знают, что CounterStrike и даже Word могут нормально работать под Linux, медиа кодеки разработанные для windows давно используются в Linux.
Просто большие компании (в т.ч. дистрибьютеры Linux) видимо боятся поддерживать преследуемый Microsoft проект Wine.
Главное не делать зла!
Для этого уже есть MS.
> А вы когда-нибудь находили какой-нибудь драйвер когда визард собирался искать его в интернет.
Я находил обновления. В Windows Update Catalog помещаются только сертифицированные на Windows Logo драйвера и их обновления. Я подозреваю, что производитель вашего оборудования не стал сертифицировать свои драйвера. Соответственно они не попали в Windows Update Catalog. Вот эта статья может пролить свет на это: http://support.microsoft.com/kb/323166
> НИКОГДА НЕ ЭТО НЕ РАБОТАЛО
Даже если так – какая разница? Это не критически важная функциональность. Это всего лишь вспомогательная функция. Сработало – замечательно. Не сработало – не очень и надо. Все работает и так. Максимум что это может вызвать – недоумение, но никак не крики “обманули”.
> XML Notepad 2007
Я не понял ни слова из написанного про XML Notepad.
> нам придется использовать и писать ПО под Windows.
И Windows и Linux это всего лишь инструменты. Каждый со своими преимуществами и недостатками. Более того никто не обещал, что эти инструменты будут работать так как вам хочеться или вообще работать. Вы вольны выбрать любой из этих инструментов или использовать их вместе. Или не использовать вообще.
Вообще говоря вы согласились в правилами игры в самом начале – “никто ничего не гарантирует и не обещает”. Так в чем проблема? Если вам не правяться такие правила – не играйте в эту игру.
Советую вам убрать коментарий на готдотенет.ру. Ничего в этих коментариях интерсного нет. Очердные высказывания ламера. Возможно человек и не ламер в программировании, но пока этот юношеский необоснованный максимализм не пройдет…
П.С. Я вообще забыл когда диски с дровами втыкал, они все свободно находятся и в интернете. Особенно это показательно с вистой, комп я покупал до выхода висты, соотвенно дров нема. Все скачалось, все установилось, все работает. Мож у человека инета нема
)?
Для справки, интернет есть, около двадцати машин подключенных есть, на них материнки от интел и от всех других. Скачать драйвер можно, и поставить можно. Но речь шла про то что визард который предлагает разрешить ему поискать дрова в интеренет никогда ничего не находил еще с windows 2000
И никакого максимализма просто решил душу отвести, халтура она и есть халтура – это видно, так как на официальных сайтах действует жутчайшая цензура, кстати огромное спасибо автору блога за человеческое отношение и ответы, меня искренне удивило что он не стирает комменты которые так или иначе несут негативное отношение к MS.
А про MS и так все становится понятно, достаточно посмотреть на Балмера прыгающего на сцене и сразу становится страшно.
Спокойно, горячие финские парни!
Всё нормально, пока спор не переходит в бессмысленную “священную войну”. Давайте ближе к фактам, подальше от эмоций. Я собственно потому и рекомендовал почитать комментарии чтобы было видно, что “очевидные вещи” на проверку оказываются не такими уж очевидными.
простите, про $PatchCache$ маловато…
> простите, про $PatchCache$ маловато…
К сожалению, ничего не могу добавить.
Здесь нужен кто-то знакомый с деталями реализации Windows Installer.
по моему все таки msi которые лежат в этой папке не особо и нужны.
Я проверил на инсталяции MediaPortal (его я ставил последней и по дате в этой папке нашелся именно его msi). Взял переименовал этот msi и нажал uninstall. Все нормально удалилось…
сейчас в раздумим что делать с оставшимися 600мб msi,msp,tmp в этой папке…