La tecnología de ensamblaje en paralelo ( SxS o WinSxS en Microsoft Windows ) es un estándar para archivos ejecutables en Windows 98 Second Edition , Windows 2000 y versiones posteriores de Windows que intenta aliviar los problemas (conocidos colectivamente como " DLL Hell ") que surgen del uso de bibliotecas de vínculos dinámicos (DLL) en Microsoft Windows. Dichos problemas incluyen conflictos de versiones, archivos DLL faltantes, archivos DLL duplicados y registros incorrectos o faltantes. En paralelo, Windows almacena varias versiones de una DLL en el %systemroot%\WinSxS
directorio y las carga según demanda. Esto reduce los problemas de dependencia para las aplicaciones que incluyen un manifiesto en paralelo .
Microsoft Visual C++ 2005 y 2008 emplean SxS con todas las bibliotecas de tiempo de ejecución de C. Sin embargo, las bibliotecas en tiempo de ejecución de Visual C++ 2010 ya no utilizan esta tecnología; en su lugar, incluyen el número de versión de una DLL en su nombre de archivo, lo que significa que las diferentes versiones de una DLL serán técnicamente DLL completamente diferentes ahora. [1] [2]
SxS es también la base tecnológica para la activación COM sin registro . De esta manera sólo se pueden activar servidores COM en proceso.
Una aplicación que emplea SxS debe tener un manifiesto . Los manifiestos suelen ser una sección integrada en el archivo ejecutable de la aplicación, pero también pueden ser un archivo externo. Cuando el sistema operativo carga la aplicación y detecta la presencia de un manifiesto, el cargador de DLL del sistema operativo se dirige a la versión de la DLL correspondiente a la que figura en el manifiesto. Si no hay ningún manifiesto, el cargador de DLL carga una versión predeterminada de todas las dependencias de DLL. Si la DLL es un servidor COM, debe tener un manifiesto propio para que la activación sin registro se realice correctamente.
En Windows Vista y posteriores,sxstrace.exepuede ayudar a diagnosticar fallas en el inicio de aplicaciones debido a una mala configuración de SxS.
Si un usuario desea anular los ensamblados especificados en el manifiesto (por ejemplo, en el caso de parches de seguridad aplicados a una biblioteca), un archivo de configuración del editor puede redirigir los ensamblados globalmente. Las firmas digitales pueden garantizar la legitimidad de dicha redirección. [3]
El manifiesto de la aplicación se representa internamente como XML . La URN asociada con los manifiestos SxS es "urn:schemas-microsoft-com:asm.v1".
Varias otras tecnologías recientes de Microsoft, como ClickOnce, emplean el mismo formato de manifiesto.
El siguiente es un ejemplo de un 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' > <dependencia> <dependentAssembly > <assemblyIdentity type= 'win32' nombre= 'Microsoft.VC90.CRT' versión= '9.0.21022.8' procesadorArchitecture= 'x86' publicKeyToken= '1fc8b3b9a1e18e3b' /> </dependentAssembly> </dependency> </assembly>
El cargador SxS analiza un manifiesto como el anterior en un contexto de activación. Hay 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 consumo en lugar de utilizar el contexto de activación de su llamador. Este tipo de problema a veces se denomina contaminación (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]
Desde Vista en adelante, el sistema operativo Windows utiliza WinSxS para sus componentes principales. Archivos del sistema operativo en elwinxsLos directorios están vinculados desde sus ubicaciones habituales en la estructura de directorios de Windows. Un archivo en un subdirectorio enwinxspuede estar vinculado desde múltiples ubicaciones (por ejemplo, elSistema32directorio y directorios de aplicaciones). El Explorador de Windows cuenta dos veces el espacio en disco ocupado por estos archivos. [6] Esto se puede demostrar utilizando el programa de línea de comandos fsutil. [7] También existen algunas extensiones de Explorer de terceros para mostrar el recuento de enlaces.
Sin embargo, no todos los archivos dewinxsse proyectan de esta manera en archivos "vivos" del sistema operativo. Por ejemplo, después de instalar algunas actualizaciones de Windows, las versiones de archivos antiguas reemplazadas por las actualizaciones aún se conservan enwinxsaunque ya no están vinculados en los directorios "vivos" de Windows. Esto permite desinstalar las actualizaciones de forma segura. [8]
Por su elevada importancia, desde Vista en adelante elwinxsEl directorio es propiedad del SID del servicio Trusted Installer. De forma predeterminada, ni siquiera los administradores pueden modificar su contenido (sin tomar posesión primero). La desinstalación de aplicaciones no libera espacio inmediatamente en elwinxsdirectorio; El servicio de instalación recolecta basura con el tiempo para los ensamblajes no utilizados. [9]
Aunque no está documentado oficialmente, el algoritmo para generar los nombres de directorio que residen dentro delwinxsEl directorio se ha hecho público en el blog de un empleado de MSDN Microsoft. El algoritmo se cambió en la transición de XP a Vista. [10]
Windows 7 incluye la herramienta Windows AIK Deployment Image Servicing and Management (DISM) que puede eliminar archivos utilizados por actualizaciones del sistema operativo reemplazadas mediante el servicio de trabajador Trusted Installer, sin la necesidad de reiniciar o desactivar el sistema; [11] Las actualizaciones posteriores al 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 de almacenamiento de componentes y reemplazar archivos del sistema operativo corruptos o faltantes con versiones en buen estado. 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 últimas versiones de los componentes del sistema operativo. [14] Windows 10 ejecuta la tarea automática para limpiar el almacén de componentes. [15]
Mientras que lawinxsEl directorio es extremadamente grande y contiene múltiples versiones de muchos archivos; hay algunos archivos en otras partes de la carpeta de Windows (p. ej.Sistema32) que son enlaces duros a archivos en elwinxsdirectorio. [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 uno ya haya sido contado. [18]
DIR y Explorer no comprueban los enlaces físicos y, por lo tanto, pueden contar el mismo archivo varias veces, lo que aumenta incorrectamente el uso percibido del disco. El uso del disco informado por estos dos programas es como si cada enlace físico fuera un archivo real. [19]
Desde Windows 8.1, la herramienta DISM se puede utilizar para analizar el almacén de componentes e informar su tamaño real. [20]