Параллельная сборка

редактировать
Стандарт для исполняемых файлов в операционных системах Windows, который пытается решить проблемы, вызванные использованием библиотек с динамической компоновкой

Технология параллельной сборки (SxS или WinSxS в Microsoft Windows ) является стандартом для исполняемого файла файлы в Windows 98 Second Edition, Windows 2000 и более поздних версиях Windows, которые пытаются устранить проблемы (вместе известные как «DLL Hell »), возникающие из использование динамически подключаемых библиотек (DLL) в Microsoft Windows. К таким проблемам относятся конфликты версий, отсутствующие библиотеки DLL, повторяющиеся библиотеки DLL, а также неправильная или отсутствующая регистрация. В параллельном режиме Windows хранит несколько версий DLL в подкаталоге WinSxSкаталога Windows и загружает их по запросу. Это уменьшает проблемы зависимостей для приложений, которые включают параллельный манифест.

Microsoft Visual C ++ 2005 и 2008 используют SxS со всеми C библиотеками времени выполнения. Однако библиотеки времени выполнения в Visual C ++ 2010 больше не используют эту технологию; вместо этого они включают номер версии DLL в имя файла, что означает, что разные версии одной DLL теперь будут технически совершенно разными DLL.

SxS также является технологической основой для отсутствия регистрации COM активация. Таким образом можно активировать только внутрипроцессные COM-серверы.

Содержание
  • 1 Операция
  • 2 Формат манифеста
    • 2.1 Пример манифеста
    • 2.2 Контексты активации
  • 3 WinSxS (хранилище компонентов Windows)
  • 4 Преимущества
  • 5 Недостатки
  • 6 Дисковое пространство
  • 7 Ссылки
  • 8 Внешние ссылки
Операция

Приложение, использующее SxS, должно иметь манифест. Манифесты обычно представляют собой раздел, встроенный в исполняемый файл приложения, но также могут быть внешним файлом. Когда операционная система загружает приложение и обнаруживает наличие манифеста, загрузчик DLL операционной системы направляется к версии DLL, соответствующей той, которая указана в манифесте. Если манифест отсутствует, загрузчик DLL загружает версию по умолчанию для всех зависимостей DLL. Если DLL является COM-сервером, она должна иметь собственный манифест для успешной активации без регистрации.

В Windows Vista и более поздних версиях sxstrace.exeможет помочь в диагностике сбоев при запуске приложений из-за неправильной конфигурации SxS.

Если пользователь желает переопределить сборки, указанные в манифесте (например, в случае исправлений безопасности, примененных к библиотеке), файл конфигурации издателя может глобально перенаправить сборки. Цифровые подписи могут обеспечить легитимность такого перенаправления.

Формат манифеста

Манифест приложения внутренне представлен как XML. URN, связанный с манифестами SxS: «urn: schemas-microsoft-com: asm.v1 ».

Некоторые другие недавние технологии Microsoft, такие как ClickOnce, используют тот же формат манифеста.

Пример манифеста

Ниже приводится пример манифеста для приложения, которое зависит от библиотеки времени выполнения C.

Контексты активации

Манифест, подобный приведенному выше, анализируется загрузчиком SxS в контексте активации. Для каждого потока или волокна существует стек контекстов активации. API позволяет программно манипулировать этими контекстами. Библиотеке (DLL ) может потребоваться изменить контекст активации, например, если для собственного потребления требуется определенная версия другой библиотеки вместо использования контекста активации вызывающей стороны. Этот тип проблемы иногда называют загрязнением (контекст активации). Чтобы предотвратить загрязнение контекста активации, в DLL может быть встроен манифест как ресурс , который анализируется при загрузке DLL. Этот манифест должен иметь идентификатор ресурса 2 в файле образа, чтобы загрузчик мог его найти.

WinSxS (хранилище компонентов Windows)

Начиная с Vista, операционная система Windows использует WinSxS в качестве ядра составные части. Файлы операционной системы в каталоге winsxsжестко связаны со своими обычными местоположениями в структуре каталогов Windows. Файл в подкаталоге в winsxsможет быть связан из нескольких мест (например, из каталога System32и каталогов приложений). Проводник Windows дважды подсчитывает дисковое пространство, занятое этими файлами. Это можно продемонстрировать с помощью программы командной строки fsutil. Также существуют некоторые сторонние расширения Explorer для отображения количества ссылок.

Однако не все файлы из winsxsпроецируются таким образом в «живые» файлы операционной системы. Например, после установки некоторых обновлений Windows старые версии файлов, замененные обновлениями, по-прежнему хранятся в winsxs, хотя они больше не связаны в «живых» каталогах Windows. Это позволяет безопасно удалять обновления.

Из-за повышенной важности, начиная с Vista, каталог winsxsпринадлежит SID службы Trusted Installer. По умолчанию даже администраторы не могут изменять его содержимое (без предварительного владения). При удалении приложений не происходит немедленного освобождения места в каталоге winsxs; пространство для неиспользуемых сборок со временем собирается сборщиком мусора службой установщика.

Хотя это официально не задокументировано, алгоритм генерации имен каталогов, находящихся в каталоге winsxs, был опубликован на MSDN Блог сотрудника Microsoft. Алгоритм был изменен при переходе с XP на Vista.

Windows 7 включает Windows AIK инструмент Обслуживание образов развертывания и управление ими (DISM), который может удалять файлы, используемые замененные обновления ОС с помощью рабочей службы Trusted Installer без необходимости перезагружать или останавливать систему; последние обновления добавляют очистку Центра обновления Windows к инструменту Очистка диска (cleanmgr.exe) и загружаемому инструменту готовности к обновлению системы (CheckSUR), который может восстановить компоненты, хранящие ошибки, и заменить поврежденную или отсутствующую ОС файлы с известными хорошими версиями. Windows 8 объединяет возможность восстановления с инструментом DISM, который теперь может копировать действительные файлы ОС из Центра обновления Windows или автономного образа WIM, а также сбрасывать хранилище компонентов, чтобы оно содержало только последние версии компонентов ОС. Windows 10 запускает автоматическую задачу по очистке хранилища компонентов.

Преимущества
  • Для приложений, созданных с помощью SxS, могут сосуществовать несколько приложений, которые зависят от разных версий одной и той же DLL. Это контрастирует со средами DLL, отличными от SxS, где исходная DLL в общей системной папке может быть перезаписана последующей установкой другой программы, которая зависит от другой версии той же DLL.
  • Форматирование XML файла манифест удобочитаем, что упрощает разработчикам определение зависимостей приложения и их версий.
Недостатки
  • В Windows XP ошибка в sxs.dllвызывает повреждение кучи, что приводит к сбою приложения. Эта проблема не устраняется ни одним пакетом обновления XP. Пользователи должны вручную установить соответствующее обновление.
  • Очевидно более высокое потребление дискового пространства, хотя большая часть содержимого winsxsпредставляет собой просто дополнительные жесткие ссылки на существующие файлы
  • Каталог winsxsи журналы Центра обновления Windows могут быть повреждены по мере увеличения их размера, поскольку обновления безопасности добавляют в магазин несколько новых версий критически важных компонентов системы. В Windows Vista нет поддерживаемого способа значительного уменьшения размера каталога winsxs.
Дисковое пространство

Хотя каталог winsxsчрезвычайно велик и содержит несколько версий многих файлов, есть некоторые файлы в другом месте в папке Windows (например, System32), которые жестко связаны с файлами в каталоге winsxs. Таким образом, программы, оценивающие размер папки Windows, должны быть осторожны, чтобы не добавлять размер дополнительных жестких ссылок к файлу после того, как одна уже была подсчитана.

DIR и Explorer не могут проверять жесткие ссылки, и поэтому может подсчитывать один и тот же файл несколько раз, неверно увеличивая предполагаемое использование диска. Эти две программы сообщают об использовании диска, как если бы каждая жесткая ссылка представляет собой реальный файл.

Начиная с Windows 8.1, инструмент DISM можно использовать для анализа хранилища компонентов и создания отчетов о его фактических данных. размер.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-08 07:51:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте