Implementación de CRT universal

Desde Visual Studio .NET hasta Visual Studio 2013, en cada versión principal del compilador y las herramientas de C++ se ha incluido una versión nueva e independiente de la Biblioteca en tiempo de ejecución de C (CRT) de Microsoft. Estas versiones independientes de la biblioteca CRT eran independientes entre ellas y, a diferentes niveles, incompatibles. Por ejemplo, la biblioteca CRT que se usaba en Visual Studio 2012 era la versión 11, denominada msvcr110.dll, y la biblioteca CRT que se usaba en Visual Studio 2013 era la versión 12, denominada msvcr120.dll. A partir de Visual Studio 2015, esto ya no es así. En Visual Studio 2015 y versiones posteriores de Visual Studio se usa CRT universal.

Universal CRT (UCRT) es un componente del sistema operativo Microsoft Windows. Se incluye como parte del sistema operativo en Windows 10 o versiones posteriores, y Windows Server 2016 o versiones posteriores. UCRT está disponible mediante Windows Update en sistemas operativos más antiguos que todavía están en periodo de soporte extendido. Se admite la implementación local de Universal CRT, con algunas restricciones.

Implementación central

El método preferido para instalar de forma centralizada CRT universal consiste en usar Microsoft Windows Update. CRT universal es una actualización recomendada para todos los sistemas operativos Microsoft Windows compatibles, por lo que de forma predeterminada, en la mayoría de los equipos se instala como parte del proceso de actualización habitual. La versión inicial de Universal CRT era KB2999226. Se realizó una actualización posterior con varias correcciones de errores en KB3118401 y se han realizado más actualizaciones con más correcciones de errores y nuevas características. Para obtener las actualizaciones más recientes, busque "Universal C Runtime" o "Universal CRT" en support.microsoft.com.

No en todos los equipos Microsoft Windows se instalan las actualizaciones periódicamente mediante Windows Update, y es posible que en algunos no se instalen todas las actualizaciones recomendadas. Para admitir el uso de aplicaciones compiladas con los conjuntos de herramientas de C++ para Visual Studio 2015 y versiones posteriores en esos equipos, existen archivos redistribuibles de Universal CRT para la distribución sin conexión. Estos archivos redistribuibles pueden descargarse desde uno de los vínculos de KB anteriores. El archivo redistribuible de Universal CRT requiere que el equipo se haya actualizado con el Service Pack actual. Por tanto, por ejemplo, el paquete redistribuible para Windows 7 solo se instalará en Windows 7 SP1, no en Windows 7 RTM.

Universal CRT es una dependencia fundamental de las bibliotecas de C++. Visual C++ Redistributable (VCRedist) instala la versión inicial de Universal CRT (versión 10.0.10240) en las máquinas que aún no tienen una instalada. Esta versión es suficiente para satisfacer las dependencias de la biblioteca de C++. Si la aplicación depende de una versión más reciente de Universal CRT, debe usar Windows Update para actualizar completamente la máquina. También puede instalar esa versión de UCRT explícitamente. Es mejor instalar Universal C Runtime mediante Windows Update o un archivo MSU antes de instalar VCRedist. Este orden de instalación puede ayudarle a evitar varios reinicios necesarios.

No todos los sistemas operativos son aptos para la versión más reciente de Universal C Runtime mediante Windows Update. En Windows 10 o Windows 11, la versión implementada centralmente coincide con la versión del sistema operativo. Para actualizar Universal C Runtime a una versión más reciente, debe actualizar el sistema operativo. Para las versiones de Windows Vista a Windows 8.1, la versión de Universal C Runtime más reciente disponible se basa en la actualización de aniversario de Windows 10 (versión 10.0.14393).

Implementación local

Se admite la implementación local de aplicación de CRT universal, aunque no se recomienda por motivos de rendimiento y seguridad. Los archivos DLL para la implementación local se incluyen como parte de Windows SDK, en el subdirectorio Windows Kits\10\Redist\ucrt\DLLs, por cada arquitectura de equipo. Los archivos DLL necesarios incluyen ucrtbase.dll y un conjunto de DLL de reenviador APISet denominado api-ms-win-*.dll. El conjunto de archivos DLL necesarios en cada sistema operativo varía. Se recomienda incluir todos los archivos DLL cuando se realice la implementación local.

En la implementación local hay que tener en cuenta dos restricciones:

  • En Windows 10 y Windows 11, siempre se usa Universal CRT en el directorio del sistema, incluso si una aplicación incluye una copia local de la aplicación de Universal CRT. Es se cumple incluso cuando la copia local es más reciente, porque Universal CRT es un componente principal del sistema operativo en Windows 10 y versiones posteriores.

  • Versiones de Windows anteriores a Windows 8: Universal CRT no se puede empaquetar localmente con un complemento si se encuentra en un lugar diferente al directorio ejecutable de la aplicación principal. En este caso, los archivos DLL de reenviador APISet no pueden resolver correctamente el archivo ucrtbase.dll. Algunas soluciones alternativas recomendadas son las siguientes:

    • Vincular CRT universal de forma estática,
    • Implementar CRT universal de forma centralizada, o bien
    • Colocar los archivos de CRT universal en el mismo directorio que la aplicación.

Implementación en Microsoft Windows XP

Los conjuntos de herramientas de Visual Studio 2015 y Visual Studio 2017 siguen admitiendo el desarrollo de software para su uso en Microsoft Windows XP. Hay una versión de Universal CRT para Microsoft Windows XP. El sistema operativo Microsoft Windows XP ya no se encuentra en soporte estándar o extendido. Por esta razón, la implementación central de Universal CRT en Microsoft Windows XP es diferente a la de otros sistemas operativos.

Cuando se instala Visual C++ Redistributable en Windows XP, se instala directamente Universal CRT y todas sus dependencias en el directorio del sistema, sin necesidad de instalar ni depender de ninguna actualización de Windows. Los módulos de combinación redistribuibles (los archivos Microsoft_VC<version>_CRT_<target>.msm) hacen lo mismo.

La implementación local de CRT universal en Windows XP es la misma que la de otros sistemas operativos compatibles.

Importante

La compatibilidad de la biblioteca en tiempo de ejecución con Windows XP ya no está disponible en la versión más reciente de Visual C++ Redistributable para Visual Studio 2015, 2017, 2019 y 2022. El último archivo redistribuible que admite Windows XP es la versión 16.7 (archivo versión 14.27.29114.0). Si las aplicaciones de Windows XP se implementan o se actualizan a una versión posterior del objeto redistribuible, no se ejecutarán. Para obtener más información y saber cómo obtener una versión del archivo redistribuible que admite Windows XP, consulte Configuración de programas para Windows XP.

Consulte también