Side-by-side assembly (SxS, or WinSxS on Microsoft Windows) technology is a standard for executable files in Windows 98 Second Edition, Windows 2000, and later versions of Windows that attempts to alleviate problems (collectively known as "DLL Hell") that arise from the use of dynamic-link libraries (DLLs) in Microsoft Windows. Such problems include version conflicts, missing DLLs, duplicate DLLs, and incorrect or missing registration. In side-by-side, Windows stores multiple versions of a DLL in the %systemroot%\WinSxS directory, and loads them on demand. This reduces dependency problems for applications that include a side-by-side manifest.
Microsoft Visual C++ 2005 and 2008 employ SxS with all Cruntime libraries. However, runtime libraries in Visual C++ 2010 no longer use this technology; instead, they include the version number of a DLL in its file name, which means that different versions of one DLL will technically be completely different DLLs now.[1][2]
SxS is also the technological basis for registration-free COM activation. Only in-process COM servers may be activated this way.
Operation
An application that employs SxS must have a manifest. Manifests are typically a section embedded in the application's executable file but may also be an external file. When the operating system loads the application and detects the presence of a manifest, the operating system DLL loader is directed to the version of the DLL corresponding to that listed in the manifest. If there is no manifest, the DLL loader loads a default version of all DLL dependencies. If the DLL is a COM server, it must have a manifest of its own for registration-free activation to succeed.
On Windows Vista and later, sxstrace.exe can help to diagnose failures in the starting of applications due to SxS misconfiguration.
If a user wishes to override manifest-specified assemblies (for example, in the case of security patches applied to a library), a publisher configuration file can globally redirect assemblies. Digital signatures can ensure the legitimacy of such redirection.[3]
Manifest format
The application manifest is internally represented as XML. The URN associated with SxS manifests is "urn:schemas-microsoft-com:asm.v1".
Several other recent Microsoft technologies such as ClickOnce employ the same manifest format.
Example manifest
A continuación se muestra un ejemplo de manifiesto para una aplicación que depende de una DLL de tiempo de ejecución de 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>Contextos de activación
Un manifiesto como el anterior es analizado en un contexto de activación por el cargador SxS. Existe una pila de contextos de activación para cada hilo o fibra. Una API permite la manipulación programática de estos contextos. Puede ser necesario que una biblioteca ( DLL ) cambie su contexto de activación, por ejemplo, si requiere una versión específica de otra biblioteca para su propio uso en lugar de utilizar el contexto de activación de quien la llama. Este tipo de problema a veces se denomina contaminación (del contexto de activación). [ 4 ] Para evitar contaminar su contexto de activación, una DLL puede tener un manifiesto incrustado como recurso , que se analiza cuando se carga la DLL. Este manifiesto debe estar en el ID de recurso 2 en el archivo de imagen para que el cargador lo encuentre. [ 5 ]
WinSxS (Tienda de componentes de Windows)
Desde Vista en adelante, el sistema operativo Windows utiliza WinSxS para sus componentes principales. Los archivos del sistema operativo en elvictoriasxsLos directorios están vinculados físicamente desde sus ubicaciones habituales en la estructura de directorios de Windows. Un archivo en un subdirectorio envictoriasxspuede estar vinculado desde múltiples ubicaciones (por ejemplo, elSistema32directorios y directorios de aplicaciones). El Explorador de Windows duplica el espacio en disco ocupado por estos archivos. [ 6 ] Esto se puede demostrar usando el programa de línea de comandos fsutil. [ 7 ] También existen algunas extensiones de terceros para el Explorador que muestran el número de enlaces.
Sin embargo, no todos los archivos devictoriasxsse proyectan de esta manera a los archivos del sistema operativo "vivos". Por ejemplo, después de instalar algunas actualizaciones de Windows, las versiones antiguas de los archivos reemplazadas por las actualizaciones todavía se conservan envictoriasxsaunque ya no están vinculados en los directorios "activos" de Windows. Esto permite desinstalar las actualizaciones de forma segura. [ 8 ]
Debido a su elevada importancia, desde Vista en adelantevictoriasxsEl directorio pertenece al SID del servicio Trusted Installer . Por defecto, ni siquiera los administradores pueden modificar su contenido (sin tomar posesión primero). Desinstalar aplicaciones no libera espacio inmediatamente en el directorio.victoriasxsdirectorio; el espacio para ensamblados no utilizados es recolectado por el recolector de basura con el tiempo por el servicio Instalador. [ 9 ]
Aunque no está documentado oficialmente, el algoritmo para generar los nombres de directorio que residen dentro delvictoriasxsEl directorio se hizo público en el blog de un empleado de Microsoft ( MSDN ). El algoritmo se modificó en la transición de XP a Vista. [ 10 ]
Windows 7 incluye la herramienta de Windows AIK , Deployment Image Servicing and Management (DISM), que puede eliminar archivos utilizados por actualizaciones de SO reemplazadas mediante el servicio de trabajador de Trusted Installer, sin necesidad de reiniciar o apagar el sistema; [ 11 ] las actualizaciones posteriores a SP1 agregan la limpieza de Windows Update a la herramienta Liberador de espacio en disco (cleanmgr.exe) [ 12 ] y la herramienta descargable System Update Readiness (CheckSUR) [ 13 ] que puede reparar errores del almacén de componentes y reemplazar archivos del sistema operativo dañados o faltantes con versiones conocidas que funcionan correctamente. Windows 8 integra la capacidad de reparación a la herramienta DISM, que ahora puede copiar archivos válidos del sistema operativo desde Windows Update o una imagen WIM sin conexión , así como restablecer el almacén de componentes para que solo contenga las versiones más recientes de los componentes del sistema operativo. [ 14 ] Windows 10 ejecuta la tarea automática para limpiar el almacén de componentes. [ 15 ]
Ventajas
- En las aplicaciones creadas con SxS, pueden coexistir varias aplicaciones que dependen de diferentes versiones de la misma DLL. Esto contrasta con los entornos de DLL sin SxS, donde una DLL original en una carpeta compartida del sistema puede ser sobrescrita por la instalación posterior de otro programa que depende de una versión diferente de la misma DLL.
- El formato XML del manifiesto es legible para los humanos, lo que facilita a los desarrolladores la determinación de las dependencias de una aplicación y sus versiones.
Desventajas
- En Windows XP, un error ensxs.dllProvoca corrupción de memoria dinámica, lo que conlleva fallos en la aplicación. Este problema no se soluciona con ningún Service Pack de XP. Los usuarios deben instalar manualmente la actualización correspondiente. [ 16 ]
- Consumo de espacio en disco aparente considerablemente mayor, a pesar de que la mayor parte del contenido devictoriasxsSon simplemente enlaces duros adicionales a archivos que existen en otros lugares.
- ElvictoriasxsLos registros del directorio y de Windows Update pueden corromperse a medida que aumentan de tamaño, porque las actualizaciones de seguridad agregan varias versiones nuevas de componentes críticos del sistema al almacén. En Windows Vista no hay una forma compatible de reducir significativamente el tamaño del directorio y de Windows Update.victoriasxsdirectorio. [ 8 ]
Espacio en disco
Mientras que elvictoriasxsEl directorio es extremadamente grande y contiene múltiples versiones de muchos archivos; hay algunos archivos en otras partes de la carpeta de Windows (por ejemploSistema32) que son enlaces duros a archivos en elvictoriasxsdirectorio. [ 17 ] Por lo tanto, los programas que estiman el tamaño de la carpeta de Windows deben tener cuidado de no agregar el tamaño de enlaces duros adicionales a un archivo después de que ya se haya contado uno. [ 18 ]
DIR y Explorer no comprueban los enlaces duros, por lo que pueden contar el mismo archivo varias veces, lo que resulta en un aumento incorrecto del uso del disco. El uso del disco que informan estos dos programas es como si cada enlace duro fuera un archivo real. [ 19 ]
Desde Windows 8.1, la herramienta DISM se puede utilizar para analizar el almacén de componentes e informar sobre su tamaño real. [ 20 ]
Referencias
- ↑ Sección "Bibliotecas de Visual C++" en Cambios importantes en Visual C++ . Consultado el 10 de septiembre de 2010.
- ↑ Véase la sección "Diferencias entre Visual C++ 2008 y Visual C++ 2010" en "Implementación en Visual C++ 2010" . Consultado el 10 de septiembre de 2010.
- ↑ Configuración del editor (Windows)
- ↑ Wiswall, Jon (2006-01-07). "Corrigiendo la contaminación del contexto de activación" . Quien no arriesga, no gana . Microsoft.
- ↑ Wiswall, Jon (17 de enero de 2006). "DLL y manifiestos de ID de recurso 2" . Quien no arriesga, no gana . Microsoft.
- ↑ "KB 2592038: Cómo aliviar la presión del espacio en disco causada por un directorio grande del Almacén de componentes de Windows (WinSxS)" . support.microsoft.com . Archivado del original el 14/10/2012.
- ↑ joscon (06-08-2010). "¿Deberías eliminar archivos en el directorio \WinSXS? ¿Y qué pasa con VSS?" . The Windows Servicing Guy .
- 1 2 Huges, Jeff (17 de septiembre de 2008). "¿Qué es el directorio WINSXS en Windows 2008 y Windows Vista y por qué es tan grande?" . Microsoft Corporation . Recuperado el 15 de marzo de 2011 .
- ↑ Wiswall, Jon (2 de enero de 2007). "Eliminar del directorio WinSxS" . Quien no arriesga, no gana . Microsoft.
- ↑ Wiswall, Jon (28-12-2005). "¿Qué es ese nombre de directorio tan horrible en Windows\WinSxS?" . Quien no arriesga, no gana . Microsoft.
- ↑ Microsoft TechNet: ¿Qué es la administración y el mantenimiento de imágenes de implementación?
- ↑ Shelbourne, Charity (8 de octubre de 2013). "¡Noticias de última hora! Reduzca el tamaño del directorio WinSxS y libere espacio en disco con una nueva actualización para clientes de Windows 7 SP1" . Ask Premier Field Engineering (PFE) Platforms . Microsoft.
- ↑ Microsoft TechNet: Directrices avanzadas para diagnosticar y corregir la corrupción de servicios
- ↑ "DISM – Reparar una imagen de Windows" . TechNet . Microsoft .
- ↑ "Limpiar la carpeta WinSxS" . Docs.Microsoft.com . 2 de mayo de 2017.
- ↑ "KB 943232: Una aplicación que utiliza el archivo Sxs.dll falla al ejecutarse en un equipo con Windows XP" . support.microsoft.com . Archivado del original el 27/10/2012.
- ↑ "Administrar el almacén de componentes" . TechNet . Microsoft .
- ↑ joscon (06-01-2011). "Cómo funcionan los enlaces duros" . The Windows Servicing Guy .
- ↑ Sinofsky, Steven (19 de noviembre de 2008). "Espacio en disco" . Ingeniería de Windows 7. Microsoft .
- ↑ "Determinar el tamaño real de la carpeta WinSxS" . TechNet . Microsoft .
Enlaces externos
- Conjuntos de ventanas uno al lado del otro
- Formato de manifiesto de implementación de ClickOnce
- Configuración de componentes basados en .NET para la activación sin registro.
- Diagnóstico de fallos de SideBySide
- Diagnóstico de fallos de SideBySide en Windows XP/Windows Server 2003
- Administración de Windows