microsoft - ¿Puedo empaquetar las DLL redistribuibles de Visual Studio 2015 C++ con mi aplicación?
microsoft visual c++ 2017 redistributable package(x64) (2)
Construí una aplicación C ++ utilizando Microsoft Visual Studio 2015 Community Edition. Estoy usando Advanced Installer para asegurarme de que Visual C ++ Redistributable para Visual Studio 2015 sea un requisito previo.
Sin embargo, el instalador del redistribuible no es perfecto. Algunos de mis usuarios han informado que el instalador redistribuible se cuelga, o falla la instalación cuando dice que sí, y luego los usuarios reciben el error "Este programa no puede iniciarse porque MSVCP140.dll no se encuentra en su computadora".
Según Microsoft, ahora puedo empaquetar los archivos DLL redistribuibles junto con mi aplicación, aunque no lo recomiendan:
Para implementar archivos redistribuibles de Visual C ++, puede usar los paquetes redistribuibles de Visual C ++ (VCRedist_x86.exe, VCRedist_x64.exe o VCRedist_arm.exe) que se incluyen en Visual Studio. ... También es posible instalar directamente archivos DLL de Visual C ++ redistribuibles en la carpeta local de la aplicación, que es la carpeta que contiene el archivo de la aplicación ejecutable. Por motivos de mantenimiento, no recomendamos que utilice esta ubicación de instalación.
Hay 4 archivos en C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/redist/x64/Microsoft.VC140.CRT
. ¿Eso significa que solo necesito copiarlos al directorio de mi aplicación durante el proceso de instalación?
- MyApp.exe
- concrt140.dll
- msvcp140.dll
- vccorlib140.dll
- vcruntime140.dll
¿Esto esta bien? ¿Necesito mostrar una licencia? ¿Por qué no hay más personas que hagan esto en lugar de requerir otra preinstalación de redistribuible?
Hay 4 archivos en
C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/redist/x64/Microsoft.VC140.CRT
. ¿Eso significa que solo necesito copiarlos al directorio de mi aplicación durante el proceso de instalación?
Sí, y el párrafo que citaste significa exactamente eso.
¿Esto esta bien? ¿Necesito mostrar una licencia? ¿Por qué no hay más personas que hagan esto en lugar de requerir otra preinstalación de redistribuible?
Técnicamente, eso está bien para hacer. Si desea ser pionero al respecto, puede incluir una nota en el readme
o help/about
en el sentido de que los VC++ 2015 redistributables provided in "local deployment" mode
como lo permite explícitamente la Implementación de Microsoft en Visual C ++ .
En cuanto a por qué más personas no lo hacen, supongo que (entre los que se preocupan en absoluto):
- para una aplicación de un solo módulo como
MyApp.exe
es más fácil compilarla con todo lo vinculado estáticamente que eliminar las dependencias externas, para empezar; - si no se incluyen esos archivos, se guardan 1+ MB del tamaño de la distribución (probablemente se descarguen);
- la ejecución con copias privadas del tiempo de ejecución (
"local deployment"
) traslada la responsabilidad de las actualizaciones al mantenedor, por lo que en caso de una solución crítica / de seguridad, el paquete tendría que volver a publicarse en forma oportuna, en lugar de"central deployment"
donde probablemente se entregará a través de Windows Update, con lo bueno y lo malo que puede traer.
Si tiene problemas con el instalador de requisitos previos, también tiene la opción de instalar los redistribuibles como módulos de combinación. Como menciona el mismo artículo de MSDN:
Otra opción es usar módulos de combinación redistribuibles (archivos .msm), que se pueden encontrar en Archivos de programa [(x86)] / Archivos comunes / Módulos de combinación.
El uso de módulos de combinación es una opción mucho más limpia que agregar manualmente los archivos. Los archivos pueden ser borrados accidentalmente por otro colega que no sabe por qué están allí, o uno de ellos podría no estar instalado, etc.
Todas las ediciones de Advanced Installer tienen soporte para incluir módulos de fusión, incluida la edición gratuita.