Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Технология параллельной сборки ( 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. [1] [2]

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

Операция [ править ]

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

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

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

Формат манифеста [ править ]

Манифест приложения внутренне представлен как XML . URN , связанный с SxS манифестов является " урна: схемы-Microsoft-ком: 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' >  <trustInfo  xmlns = " urn: schemas-microsoft-com: asm.v3 " >  <security>  <requestedPrivileges>  <  requestExecutionLevel level = 'asInvoker'  uiAccess = 'false'  />  </requestedPrivileges>  </security>  </trustInfo>  <dependency>  <зависимая  сборка > <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 могут быть связаны из нескольких мест (например, System32каталог и каталоги приложений). Проводник Windows дважды подсчитывает дисковое пространство, занятое этими файлами. [6] Это можно продемонстрировать с помощью программы командной строки fsutil. [7] Существуют также некоторые сторонние расширения Explorer для отображения количества ссылок.

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

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

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

Windows 7 включает в себя инструмент Windows AIK для обслуживания образов развертывания и управления ими (DISM), который может удалять файлы, используемые замененными обновлениями ОС, с помощью рабочей службы Trusted Installer без необходимости перезагрузки или отключения системы; [11] недавний [ когда? ] обновления добавляют очистку Центра обновления 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это просто дополнительные жесткие ссылки на файлы, которые существуют в другом месте.
  • В Winsxsкаталог и журналы Центра обновления Windows могут быть повреждены по мере увеличения их размера, поскольку обновления безопасности добавляют в магазин несколько новых версий критически важных компонентов системы. В Windows Vista нет поддерживаемого способа значительно уменьшить размер файла.Winsxsкаталог. [8]

Дисковое пространство [ править ]

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

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

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

Ссылки [ править ]

  1. ^ Раздел «Библиотеки Visual C ++» в разделе « Критические изменения в Visual C ++» . Проверено 10 сентября 2010.
  2. ^ См. Раздел «Различия между Visual C ++ 2008 и Visual C ++ 2010» в «Развертывании в Visual C ++ 2010» . Проверено 10 сентября 2010.
  3. ^ Конфигурация издателя (Windows)
  4. ^ Wiswall, Джон (2006-01-07). «Устранение загрязнения контекста активации» . Ничего не рискнули, ничего не выиграли . Microsoft.
  5. ^ Wiswall, Джон (2006-01-17). «Проекты DLL и ресурса с идентификатором 2» . Ничего не рискнули, ничего не выиграли . Microsoft.
  6. ^ «KB 2592038: Как уменьшить давление на дисковое пространство, вызванное большим каталогом хранилища компонентов Windows (WinSxS)» . support.microsoft.com . Архивировано из оригинала на 2012-10-14.
  7. ^ joscon (06.08.2010). «Стоит ли удалять файлы в каталоге \ WinSXS? А что с VSS?» . Парень по обслуживанию Windows .
  8. ^ a b Хьюз, Джефф (17 сентября 2008 г.). «Что такое каталог WINSXS в Windows 2008 и Windows Vista и почему он такой большой?» . Корпорация Microsoft . Проверено 15 марта 2011 года .
  9. ^ Wiswall, Джон (2007-01-02). «Удаление из каталога WinSxS» . Ничего не рискнули, ничего не выиграли . Microsoft.
  10. ^ Wiswall, Джон (2005-12-28). "Что это за ужасное имя каталога в Windows \ WinSxS?" . Ничего не рискнули, ничего не выиграли . Microsoft.
  11. ^ Microsoft TechNet: что такое обслуживание образов развертывания и управление ими?
  12. ^ Шелборн, Благотворительность (2013-10-08). «Последние новости! Уменьшите размер каталога WinSxS и освободите место на диске с помощью нового обновления для клиентов Windows 7 SP1» . Спросите Premier Field Engineering (PFE) Platforms . Microsoft.
  13. ^ Microsoft TechNet: Расширенные рекомендации по диагностике и устранению повреждений при обслуживании.
  14. ^ «DISM - Восстановить образ Windows» . TechNet . Microsoft .
  15. ^ «Очистить папку WinSxS» . Docs.Microsoft.com . 2017-05-02.
  16. ^ «943232 КБ: приложение, использующее файл Sxs.dll, дает сбой при запуске приложения на компьютере под управлением Windows XP» . support.microsoft.com . Архивировано из оригинала на 2012-10-27.
  17. ^ «Управление хранилищем компонентов» . TechNet . Microsoft .
  18. ^ joscon (06.01.2011). «Как работают жесткие ссылки» . Парень по обслуживанию Windows .
  19. ^ Синофски, Стивен (2008-11-19). «Дисковое пространство» . Инженерная Windows 7 . Microsoft .
  20. ^ «Определите фактический размер папки WinSxS» . TechNet . Microsoft .

Внешние ссылки [ править ]

  • Параллельные сборки (Windows)
  • Формат манифеста развертывания ClickOnce
  • Настройка компонентов на базе .NET для активации без регистрации
  • Диагностика сбоев SideBySide
  • Диагностика сбоев SideBySide в Windows XP / Windows Server 2003