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 (conocido 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, DLL que faltan, DLL duplicados y registros incorrectos o faltantes. En paralelo, Windows almacena varias versiones de una DLL en elWinSxSsubdirectorio del directorio de Windows y los carga a pedido. Esto reduce los problemas de dependencia para las aplicaciones que incluyen un manifiesto en paralelo .
Microsoft Visual C ++ 2005 y 2008 SxS emplean con todos C bibliotecas de tiempo de ejecución . 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 también es la base tecnológica para la activación COM sin registro . Solo los servidores COM en proceso pueden activarse de esta manera.
Operación
Una aplicación que emplea SxS debe tener un manifiesto . Los manifiestos suelen ser una sección incrustada 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 listada 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 posterior,sxstrace.exe puede 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 por 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]
Formato de manifiesto
El manifiesto de la aplicación se representa internamente como XML . La URN asociada con los manifiestos de SxS es " urn: schemas-microsoft-com: asm.v1 ".
Varias otras tecnologías recientes de Microsoft, como ClickOnce, emplean el mismo formato de manifiesto.
Manifiesto de ejemplo
El siguiente es un ejemplo de un manifiesto para una aplicación que depende de una DLL en tiempo de ejecución de C.
xml version = '1.0' encoding = 'UTF-8' standalone = 'yes'?> xmlns = 'urn: schemas-microsoft-com: asm.v1' manifestVersion = '1.0' > xmlns = " urn: schemas-microsoft-com: asm.v3 " > < requiredExecutionLevel level = 'asInvoker' uiAccess = 'false' /> < pendentAssembly > type = 'win32' name = 'Microsoft.VC90.CRT' version = '9.0.21022.8' processorArchitecture = 'x86' publicKeyToken = '1fc8b3b9a1e18e3b' />
Contextos de activación
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]
WinSxS (tienda de componentes de Windows)
Desde Vista en adelante, el sistema operativo Windows usa WinSxS para sus componentes principales. Archivos del sistema operativo en elwinsxsLos directorios están vinculados desde sus ubicaciones habituales en la estructura de directorios de Windows. Un archivo en un subdirectorio enwinsxs pueden estar vinculados desde múltiples ubicaciones (por ejemplo, el System32directorio y directorios de aplicaciones). El Explorador de Windows cuenta dos veces 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 Explorer de terceros para mostrar el recuento de enlaces.
Sin embargo, no todos los archivos de winsxsse proyectan de esta manera a archivos del sistema operativo "en vivo". Por ejemplo, después de instalar algunas actualizaciones de Windows, las versiones de archivo antiguas reemplazadas por las actualizaciones aún se mantienen enwinsxsaunque ya no están vinculados en los directorios "activos" de Windows. Esto permite que las actualizaciones se desinstalen de forma segura. [8]
Debido a su elevada importancia, desde Vista en adelante, el winsxsEl 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 elwinsxsdirectorio; el espacio para los ensamblajes no utilizados es recolectado como basura a lo largo del tiempo por el servicio Instalador. [9]
Aunque no está documentado oficialmente, el algoritmo para generar los nombres de directorio que residen dentro del winsxsEl directorio se ha hecho público en el blog de un empleado de Microsoft de MSDN . El algoritmo se cambió en la transición de XP a Vista. [10]
Windows 7 incluye la herramienta de administración y mantenimiento de imágenes de implementación (DISM) de Windows AIK , que puede eliminar los archivos utilizados por las actualizaciones del sistema operativo reemplazadas mediante el servicio de trabajador de 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 de SO corruptos o faltantes con versiones buenas conocidas. 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]
Ventajas
- Para las aplicaciones que se han creado con SxS, pueden coexistir varias aplicaciones que dependen de diferentes versiones de la misma DLL. Esto contrasta con los entornos de DLL que no son 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 por humanos y, por lo tanto, facilita a los desarrolladores determinar las dependencias de una aplicación y sus versiones.
Desventajas
- En Windows XP, un error en sxs.dllprovoca daños en el montón, lo que provoca fallos en la aplicación. Este problema no lo soluciona ningún paquete de servicio de XP. Los usuarios deben instalar manualmente una actualización adecuada. [dieciséis]
- Consumo de espacio en disco aparente considerablemente mayor, aunque la mayor parte del contenido de winsxsson solo enlaces físicos adicionales a archivos que existen en otros lugares.
- La winsxsEl directorio y los registros de Windows Update pueden dañarse a medida que aumentan de tamaño, porque las actualizaciones de seguridad agregan múltiples versiones nuevas de componentes críticos del sistema a la tienda. En Windows Vista no existe una forma compatible de reducir significativamente el tamaño delwinsxsdirectorio. [8]
Espacio del disco
Mientras que la winsxs El directorio es extremadamente grande y contiene múltiples versiones de muchos archivos, hay algunos archivos en otra parte de la carpeta de Windows (p. ej. System32) que son enlaces físicos a archivos en el winsxsdirectorio. [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 pueden verificar los enlaces físicos y, por lo tanto, pueden contar el mismo archivo varias veces, lo que se agrega incorrectamente al uso del disco percibido. El uso del disco informado por estos dos programas es como si cada vínculo 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]
Referencias
- ^ Sección "Bibliotecas de Visual C ++" en Cambios importantes en Visual C ++ . Consultado el 10 de septiembre de 2010.
- ^ Consulte 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 (7 de enero de 2006). "Reparación de la contaminación del contexto de activación" . Nada arriesgado, nada ganado . Microsoft.
- ^ Wiswall, Jon (17 de enero de 2006). "DLL y manifiestos de ID de recurso 2" . Nada arriesgado, nada ganado . Microsoft.
- ^ "KB 2592038: Cómo aliviar la presión de espacio en disco causada por un directorio de almacén de componentes de Windows grande (WinSxS)" . support.microsoft.com . Archivado desde el original el 14 de octubre de 2012.
- ^ joscon (6 de agosto de 2010). "¿Debería eliminar archivos en el directorio \ WinSXS? ¿Y cuál es el problema con VSS?" . El tipo de mantenimiento de Windows .
- ^ a b Enormes, 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 . Consultado el 15 de marzo de 2011 .
- ^ Wiswall, Jon (2 de enero de 2007). "Eliminación del directorio de WinSxS" . Nada arriesgado, nada ganado . Microsoft.
- ^ Wiswall, Jon (28 de diciembre de 2005). "¿Cuál es ese horrible nombre de directorio en Windows \ WinSxS?" . Nada arriesgado, nada ganado . Microsoft.
- ^ Microsoft TechNet: ¿Qué es la administración y el mantenimiento de imágenes de implementación?
- ^ Shelbourne, Charity (8 de octubre de 2013). "¡Últimas noticias! Reduzca el tamaño del directorio WinSxS y libere espacio en disco con una nueva actualización para clientes con Windows 7 SP1" . Pregunte a Premier Field Engineering (PFE) Plataformas . Microsoft.
- ^ Microsoft TechNet: pautas avanzadas para diagnosticar y corregir daños en el servicio
- ^ "DISM: reparar una imagen de Windows" . TechNet . Microsoft .
- ^ "Limpiar la carpeta WinSxS" . Docs.Microsoft.com . 2017-05-02.
- ^ "KB 943232: una aplicación que utiliza el archivo Sxs.dll se bloquea cuando se ejecuta en una computadora con Windows XP" . support.microsoft.com . Archivado desde el original el 27 de octubre de 2012.
- ^ "Administrar el almacén de componentes" . TechNet . Microsoft .
- ^ joscon (6 de enero de 2011). "Cómo funcionan los enlaces duros" . El tipo de mantenimiento de Windows .
- ^ Sinofsky, Steven (19 de noviembre de 2008). "Espacio en disco" . Ingeniería de Windows 7 . Microsoft .
- ^ "Determine el tamaño real de la carpeta WinSxS" . TechNet . Microsoft .
enlaces externos
- Ensamblajes en paralelo (Windows)
- Formato de manifiesto de implementación ClickOnce
- Configuración de componentes basados en .NET para la activación sin registro
- Diagnóstico de fallas SideBySide
- Diagnosticar fallas de SideBySide en Windows XP / Windows Server 2003