Error 0x80240017 al intentar instalar los paquetes de redistribución de Visual C++ 2015 o Visual C++ 2017

Los paquetes vc_redist.x86.exe y vc_redist.x64.exe de Visual C++ 2015 o de Visual C++ 2017 permiten instalar bibliotecas tales como Vcruntime140.dll, Msvcp140.dll y Mfc140.dll. En determinadas condiciones, el proceso puede fallar con el código de error 0x80240017, que significa “la actualización no es aplicable al equipo”. Las DLL de estas versiones de Visual C++ dependen de un componente denominado “biblioteca CRT universal”, incluido en Windows 10, cuya instalación en varias de las versiones anteriores de Windows requiere un service pack o una actualización previa específica.

Estos paquetes de redistribución incluyen la actualización KB2999226 para Windows Vista, Windows 7, Windows 8, Windows 8.1 y sus versiones de servidor equivalentes (de 2008 a 2012 R2). Solamente intentan aplicarla si no encuentran Ucrtbase.dll en el directorio del sistema con un número de versión 10.0.10240.0 o superior. Este criterio difiere en el paquete de Visual C++ 2015 RTM (v14.0.23026.0), que comprobaba en su lugar la existencia de Api-ms-win-crt-runtime-l1-1-0.dll con una versión igual o superior a 10.0.10137.0. Aunque no es del todo incorrecto, Api-ms-win-crt-runtime-l1-1-0.dll sólo forma parte de la distribución de la biblioteca CRT universal para las versiones anteriores a Windows 10, pero en este sistema no es necesaria. Las referencias a las bibliotecas Api-ms-win-crt-*.dll se resuelven en Windows 10 con una redirección a Ucrtbase.dll mediante Apisetschema.dll.

Para prevenir la mayor parte de los errores 0x80240017 en la instalación de los paquetes de redistribución, habría que comprobar que se cumplen las siguientes condiciones:

  • Windows Vista y Windows Server 2008 (versión 6.0) necesitan tener el Service Pack 2.
  • Windows 7 y Windows Server 2008 R2 (versión 6.1) precisan del Service Pack 1.
  • Windows 8.1 y Windows Server 2012 R2 (versión 6.3) necesitan el paquete KB2919355 de abril de 2014, que depende a su vez de la actualización KB2919442 de marzo del mismo año o una posterior para la pila de mantenimiento (servicing stack).

Windows 8, sin soporte por parte de Microsoft (excepto la edición especial Embedded), y Windows Server 2012, ambos con la versión 6.2, no requieren nada en particular. Además, desde abril de 2017 los denominados “paquetes acumulativos mensuales de calidad y seguridad” para Windows 7, Windows Server 2008 R2 y posteriores ya incorporan los archivos de la biblioteca CRT universal, por tanto los paquetes vc_redist no necesitarán instalarlos por separado.

Las causas más comunes del error 0x80240017 son:

  • El paquete MSU no corresponde exactamente al sistema operativo instalado. Por ejemplo, se intenta aplicar una actualización destinada a Windows 7 en Windows 8.1, o viceversa; o un paquete para Windows x64 sobre un Windows x86.
  • Falta un requisito, como un service pack, una actualización previa o un componente ausente o no habilitado. Normalmente, el artículo técnico de Microsoft asociado informa de las condiciones necesarias.
  • El mismo paquete o una versión posterior ya está presente en el sistema.
  • Se instaló una actualización que reemplaza a la que se intenta aplicar. Este es probablemente el caso más difícil de distinguir.

Aun así, existen situaciones extrañas no cubiertas por los supuestos anteriores. Si la instalación de las bibliotecas de Visual C++ 2015 o 2017 fracasa con el error 0x80240017 y los requisitos indicados antes se cumplen, es posible que exista un daño o inconsistencia en los archivos del sistema. La lógica de la instalación podría no encontrar Ucrtbase.dll y por tanto seleccionaría el paquete MSU correspondiente a pesar de constar como instalado previamente, lo que provocaría el error. La solución de este ejemplo concreto se encontraría fuera del ámbito del artículo.

4 thoughts on “Error 0x80240017 al intentar instalar los paquetes de redistribución de Visual C++ 2015 o Visual C++ 2017

Comments are closed.