Боковая сборка
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2016 г. ) |
Технология параллельной сборки ( SxS или WinSxS в Microsoft Windows ) — это стандарт для исполняемых файлов в Windows 98 Second Edition , Windows 2000 и более поздних версиях Windows, который пытается облегчить проблемы (известные под общим названием « DLL Hell »). которые возникают в результате использования библиотек динамической компоновки (DLL) в Microsoft Windows. К таким проблемам относятся конфликты версий, отсутствие DLL, дублирование DLL и неправильная или отсутствующая регистрация. Windows одновременно хранит несколько версий DLL в %systemroot%\WinSxS
каталог и загружает их по требованию. Это уменьшает проблемы с зависимостями для приложений, которые включают параллельный манифест .
Microsoft Visual C++ 2005 и 2008 использует SxS со всеми C. времени выполнения библиотеками Однако библиотеки времени выполнения Visual C++ 2010 больше не используют эту технологию; вместо этого они включают номер версии DLL в имя файла, что означает, что разные версии одной DLL теперь технически будут совершенно разными DLL. [1] [2]
SxS также является технологической основой для активации COM без регистрации . Таким способом можно активировать только внутрипроцессные COM-серверы.
Операция
[ редактировать ]Приложение, использующее SxS, должно иметь манифест . Манифесты обычно представляют собой раздел, встроенный в исполняемый файл приложения, но также могут быть внешним файлом. Когда операционная система загружает приложение и обнаруживает наличие манифеста, загрузчик DLL операционной системы направляется на версию DLL, соответствующую той, которая указана в манифесте. Если манифест отсутствует, загрузчик DLL загружает версию по умолчанию всех зависимостей DLL. Если DLL является COM-сервером, для успешной активации без регистрации у нее должен быть собственный манифест.
В Windows Vista и более поздних версиях sxstrace.exe может помочь диагностировать сбои при запуске приложений из-за неправильной настройки SxS.
Если пользователь желает переопределить сборки, указанные в манифесте (например, в случае применения исправлений безопасности к библиотеке), файл конфигурации издателя может глобально перенаправить сборки. Цифровые подписи могут гарантировать легитимность такого перенаправления. [3]
Формат манифеста
[ редактировать ]Манифест приложения внутренне представлен в виде XML . URN , связанный с манифестами SxS, — « urn:schemas-microsoft-com:asm.v1 ».
Несколько других последних технологий Microsoft, таких как ClickOnce, используют тот же формат манифеста.
Пример манифеста
[ редактировать ]Ниже приведен пример манифеста для приложения, которое зависит от библиотеки DLL среды выполнения C.
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Контексты активации
[ редактировать ]Манифест, подобный приведенному выше, анализируется в контексте активации загрузчиком SxS. Для каждого потока или волокна существует стек контекстов активации. API позволяет программно манипулировать этими контекстами. ) может потребоваться Библиотеке ( DLL изменить свой контекст активации, например, если ей требуется определенная версия другой библиотеки для собственного использования вместо использования контекста активации вызывающего объекта. Этот тип проблемы иногда называют (контекст активации) загрязнением. [4] Чтобы предотвратить загрязнение контекста активации, DLL может иметь встроенный в качестве ресурса манифест , который анализируется при загрузке DLL. Этот манифест должен иметь идентификатор ресурса 2 в файле изображения, чтобы загрузчик мог его найти. [5]
WinSxS (хранилище компонентов Windows)
[ редактировать ]
Начиная с Vista, операционная система Windows использует WinSxS в качестве своих основных компонентов. Файлы операционной системы в папке Winsxs каталоги жестко связаны со своими обычными местами в структуре каталогов Windows. Файл в подкаталоге в Winsxs могут быть связаны из нескольких мест (например, Система32 каталог и каталоги приложений). Проводник Windows дважды подсчитывает дисковое пространство, занимаемое этими файлами. [6] Это можно продемонстрировать с помощью программы командной строки fsutil. [7] Также существуют некоторые сторонние расширения Explorer для отображения количества ссылок.
Однако не все файлы из Winsxs проецируются таким образом на «живые» файлы операционной системы. Например, после установки некоторых обновлений Windows старые версии файлов, замененные обновлениями, по-прежнему сохраняются. Winsxs хотя они больше не связаны в «живых» каталогах Windows. Это позволяет безопасно удалять обновления. [8]
Из-за своей повышенной важности, начиная с Vista, Winsxs Каталог принадлежит SID службы доверенного установщика. По умолчанию даже администраторы не могут изменять его содержимое (без предварительного вступления во владение). Удаление приложений не приводит к немедленному освобождению места в Winsxs каталог; пространство для неиспользуемых сборок со временем удаляется службой установщика. [9]
Хотя это официально не документировано, алгоритм генерации имен каталогов, находящихся внутри Winsxs Каталог был обнародован в MSDN блоге сотрудника Microsoft. Алгоритм был изменен при переходе с XP на Vista. [10]
Windows 7 включает в себя (DISM) Windows AIK инструмент обслуживания образов развертывания и управления ими , который может удалять файлы, используемые заменяемыми обновлениями ОС, с помощью рабочей службы Trusted Installer без необходимости перезагрузки или отключения системы; [11] Обновления после SP1 добавляют очистку Центра обновления Windows в инструмент «Очистка диска» ( Cleanmgr.exe ) [12] и загружаемый инструмент проверки готовности к обновлению системы (CheckSUR). [13] который может исправлять ошибки хранения компонентов и заменять поврежденные или отсутствующие файлы ОС заведомо исправными версиями. Windows 8 интегрирует возможность восстановления в инструмент DISM, который теперь может копировать действительные файлы ОС из Центра обновления Windows или автономного образа WIM , а также сбрасывать хранилище компонентов, чтобы оно содержало только последние версии компонентов ОС. [14] Windows 10 запускает автоматическую задачу по очистке хранилища компонентов. [15]
Преимущества
[ редактировать ]- В приложениях, созданных с помощью SxS, могут сосуществовать несколько приложений, зависящих от разных версий одной и той же библиотеки DLL. В этом отличие от сред DLL, отличных от SxS, где исходная DLL в общей системной папке может быть перезаписана при последующей установке другой программы, которая зависит от другой версии той же DLL.
- XML-формат манифеста удобен для чтения человеком и, таким образом, упрощает разработчикам определение зависимостей приложения и их версий.
Недостатки
[ редактировать ]- В Windows XP ошибка в sxs.dll вызывает повреждение кучи, что приводит к сбоям в работе приложения. Эта проблема не устранена ни одним пакетом обновлений XP. Пользователи должны вручную установить соответствующее обновление. [16]
- Значительно более высокое видимое потребление дискового пространства, хотя большая часть содержимого Winsxs это просто дополнительные жесткие ссылки на файлы, которые существуют где-то еще.
- The Winsxs Каталог и журналы Центра обновления Windows могут быть повреждены по мере увеличения размера, поскольку обновления безопасности добавляют в хранилище несколько новых версий критических системных компонентов. В Windows Vista не поддерживается способ существенно уменьшить размер файла. Winsxs каталог. [8]
Дисковое пространство
[ редактировать ]В то время как Winsxs Каталог очень большой и содержит несколько версий многих файлов, некоторые файлы есть в других местах папки Windows (например, Система32 ), которые являются жесткими ссылками на файлы в Winsxs каталог. [17] Таким образом, программы, оценивающие размер папки Windows, должны быть осторожны, чтобы не добавлять к файлу размер дополнительных жестких ссылок после того, как одна из них уже подсчитана. [18]
DIR и Explorer не проверяют наличие жестких ссылок и поэтому могут учитывать один и тот же файл несколько раз, что приводит к неправильному увеличению воспринимаемого использования диска. Использование диска, о котором сообщают эти две программы, соответствует тому, как если бы каждая жесткая ссылка была реальным файлом. [19]
Начиная с Windows 8.1, инструмент DISM можно использовать для анализа хранилища компонентов и сообщения о его фактическом размере. [20]
Ссылки
[ редактировать ]- ^ Раздел «Библиотеки Visual C++» в статье «Основные изменения в Visual C++» . Проверено 10 сентября 2010 г.
- ^ См. раздел «Различия между Visual C++ 2008 и Visual C++ 2010» в «Развертывание в Visual C++ 2010» . Проверено 10 сентября 2010 г.
- ^ Конфигурация издателя (Windows)
- ^ Висволл, Джон (7 января 2006 г.). «Устранение загрязнения контекста активации» . Ничто не рискнуло, ничего не выиграло . Майкрософт.
- ^ Висвалл, Джон (17 января 2006 г.). «DLL и манифесты ресурса с идентификатором 2» . Ничто не рискнуло, ничего не выиграло . Майкрософт.
- ^ «KB 2592038: Как уменьшить нагрузку на дисковое пространство, вызванную большим каталогом хранилища компонентов Windows (WinSxS)» . support.microsoft.com . Архивировано из оригинала 14 октября 2012 г.
- ^ Джоскон (6 августа 2010 г.). «Следует ли удалять файлы в каталоге \WinSXS? А как обстоят дела с VSS?» . Специалист по обслуживанию Windows .
- ^ Jump up to: а б Хьюз, Джефф (17 сентября 2008 г.). «Что такое каталог WINSXS в Windows 2008 и Windows Vista и почему он такой большой?» . Корпорация Майкрософт . Проверено 15 марта 2011 г.
- ^ Висволл, Джон (2 января 2007 г.). «Удаление из каталога WinSxS» . Ничто не рискнуло, ничего не выиграло . Майкрософт.
- ^ Висвалл, Джон (28 декабря 2005 г.). «Что это за ужасное имя каталога в Windows\WinSxS?» . Ничто не рискнуло, ничего не выиграло . Майкрософт.
- ^ Microsoft TechNet: Что такое обслуживание образов развертывания и управление ими?
- ^ Шелбурн, Благотворительность (08 октября 2013 г.). «Последние новости! Уменьшите размер каталога WinSxS и освободите дисковое пространство с помощью нового обновления для клиентов Windows 7 SP1» . Спросите платформы Premier Field Engineering (PFE) . Майкрософт.
- ^ Microsoft TechNet: Расширенные рекомендации по диагностике и устранению повреждений при обслуживании.
- ^ «DISM – восстановление образа Windows» . ТехНет . Майкрософт .
- ^ «Очистка папки WinSxS» . Документы.Microsoft.com . 2017-05-02.
- ^ «KB 943232: Приложение, использующее файл Sxs.dll, аварийно завершает работу при запуске приложения на компьютере под управлением Windows XP» . support.microsoft.com . Архивировано из оригинала 27 октября 2012 г.
- ^ «Управление хранилищем компонентов» . ТехНет . Майкрософт .
- ^ Джоскон (06 января 2011 г.). «Как работают жесткие ссылки» . Специалист по обслуживанию Windows .
- ^ Синофски, Стивен (19 ноября 2008 г.). «Дисковое пространство» . Инженерная Windows 7 . Майкрософт .
- ^ «Определить фактический размер папки WinSxS» . ТехНет . Майкрософт .