stringtranslate.com

Montaje lado a lado

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, DLL faltantes, DLL duplicadas y registro incorrecto o faltante. En el ensamblaje en paralelo, Windows almacena múltiples versiones de una DLL en el directorio y las carga a pedido. Esto reduce los problemas de dependencia para las aplicaciones que incluyen un manifiesto%systemroot%\WinSxS 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 de tiempo de ejecución en 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 necesidad de registro . De esta forma, solo se pueden activar servidores COM en proceso.

Operación

Una aplicación que utiliza 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 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 su propio manifiesto para que la activación sin registro tenga éxito.

En Windows Vista y versiones 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 ensambles especificados en el manifiesto (por ejemplo, en el caso de parches de seguridad aplicados a una biblioteca), un archivo de configuración del publicador puede redirigir los ensambles de manera global. 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 SxS es "urn:schemas-microsoft-com:asm.v1".

Varias otras tecnologías recientes de Microsoft, como ClickOnce, emplean el mismo formato de manifiesto.

Ejemplo 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' > <dependency> <dependentAssembly> <assemblyIdentity type= 'win32' name= 'Microsoft.VC90.CRT' version= '9.0.21022.8' processArchitecture= '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. 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 usar el contexto de activación de su llamador. 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 un recurso , que se analiza cuando se carga la DLL. Este manifiesto debe estar en el identificador de recurso 2 en el archivo de imagen para que el cargador lo encuentre. [5]

WinSxS (tienda de componentes de Windows)

A partir de Vista, el sistema operativo Windows utiliza WinSxS para sus componentes principales. Los archivos del sistema operativo en elganaxsLos directorios tienen enlaces fijos desde sus ubicaciones habituales en la estructura de directorios de Windows. Un archivo en un subdirectorio enganaxspueden vincularse 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 terceros del Explorador para mostrar el recuento de enlaces.

Sin embargo, no todos los archivos deganaxsDe esta manera se proyectan en archivos del sistema operativo "vivos". Por ejemplo, después de instalar algunas actualizaciones de Windows, las versiones antiguas de los archivos que se reemplazan por las actualizaciones aún se conservan enganaxsAunque 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, a partir de Vista en adelanteganaxsEl directorio es propiedad del SID del servicio Trusted Installer. De manera predeterminada, ni siquiera los administradores pueden modificar su contenido (sin tomar posesión primero). La desinstalación de aplicaciones no libera espacio inmediatamente en el directorio.ganaxsdirectorio; el espacio para ensamblajes no utilizados es recolectado como basura con el tiempo por el servicio de instalación. [9]

Aunque no está documentado oficialmente, el algoritmo para generar los nombres de directorio que residen dentro delganaxsEl directorio se ha hecho 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 Windows AIK Deployment Image Servicing and Management (DISM) que puede eliminar archivos utilizados por actualizaciones de SO reemplazadas mediante el servicio de trabajo 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 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]

Ventajas

Desventajas

Espacio en disco

Mientras que elganaxsEl directorio es extremadamente grande y contiene múltiples versiones de muchos archivos, hay algunos archivos en otras partes de la carpeta de Windows (por ejemplo,Sistema32) que son enlaces duros a archivos en elganaxsdirectorio. [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 vínculos físicos, por lo que pueden contar el mismo archivo varias veces, lo que aumenta incorrectamente el 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

  1. ^ Sección "Bibliotecas de Visual C++" en Cambios importantes en Visual C++. Recuperado el 10 de septiembre de 2010.
  2. ^ Consulte la sección "Diferencias entre Visual C++ 2008 y Visual C++ 2010" en "Implementación en Visual C++ 2010". Recuperado el 10 de septiembre de 2010.
  3. ^ Configuración del editor (Windows)
  4. ^ Wiswall, Jon (7 de enero de 2006). "Cómo solucionar la contaminación del contexto de activación". Quien no arriesga no gana . Microsoft.
  5. ^ Wiswall, Jon (17 de enero de 2006). "Manifiestos de DLL e identificadores de recursos 2". Quien no arriesga no gana . Microsoft.
  6. ^ "KB 2592038: Cómo aliviar la presión de espacio en disco causada por un directorio de almacén de componentes de Windows (WinSxS) de gran tamaño". support.microsoft.com . Archivado desde el original el 14 de octubre de 2012.
  7. ^ joscon (6 de agosto de 2010). "¿Deberías eliminar archivos en el directorio \WinSXS? ¿Y qué pasa con VSS?". The Windows Servicing Guy .
  8. ^ ab 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 . Consultado el 15 de marzo de 2011 .
  9. ^ Wiswall, Jon (2 de enero de 2007). "Eliminación del directorio WinSxS". Quien no arriesga no gana . Microsoft.
  10. ^ Wiswall, Jon (28 de diciembre de 2005). "¿Qué es ese horrible nombre de directorio en Windows\WinSxS?". Quien no arriesga no gana . Microsoft.
  11. ^ Microsoft TechNet: ¿Qué es la gestión y el mantenimiento de imágenes de implementación?
  12. ^ 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 de Windows 7 SP1". Plataformas de ingeniería de campo (PFE) de Ask Premier . Microsoft.
  13. ^ Microsoft TechNet: Directrices avanzadas para diagnosticar y reparar la corrupción en el servicio
  14. ^ "DISM – Reparar una imagen de Windows". TechNet . Microsoft .
  15. ^ "Limpiar la carpeta WinSxS". Docs.Microsoft.com . 2017-05-02.
  16. ^ "KB 943232: Una aplicación que utiliza el archivo Sxs.dll se bloquea cuando se ejecuta en un equipo con Windows XP". support.microsoft.com . Archivado desde el original el 27 de octubre de 2012.
  17. ^ "Administrar el almacén de componentes". TechNet . Microsoft .
  18. ^ joscon (6 de enero de 2011). "Cómo funcionan los enlaces duros". The Windows Servicing Guy .
  19. ^ Sinofsky, Steven (19 de noviembre de 2008). "Espacio en disco". Ingeniería de Windows 7. Microsoft .
  20. ^ "Determinar el tamaño real de la carpeta WinSxS". TechNet . Microsoft .

Enlaces externos