Redistribuibles de Visual C++ sin usar VCRedist_x86.exe
visual-c++ dll (4)
Especifique / MT (multiproceso) para la configuración de "biblioteca de tiempo de ejecución" en la página de propiedades del compilador. Esto enlaza de forma estática con la biblioteca de tiempo de ejecución para que no tenga que instalar la redistribuible.
Me estoy desarrollando en un entorno muy restringido, pero los desarrolladores también tienen un control estricto.
VCRedist_x86.exe - Un 4Mb redistribuible - no es divertido (cuatro horas para transferir). Preferiría simplemente redistribuir MFC90.dll, msvcm90.dll, msvcp90.dll y msvcr90.dll, es más como 2Mb. Sin embargo, Redistribuir archivos de Visual C ++ dice:
No es compatible para redistribuir las aplicaciones C / C ++ que se crean sin un manifiesto. Las bibliotecas C ++ no pueden usar las bibliotecas de Visual C ++ sin un manifiesto que vincule la aplicación a estas bibliotecas. Para obtener más información, vea Elegir un método de implementación .
Mi plan original de copiar los archivos DLL en el directorio de trabajo del programa no parece funcionar en este mundo nuevo y valiente de manifiestos.
Mi próxima conjetura es corroborar las entradas de registro necesarias para completar los archivos en el directorio de WinSxS y poblarlo yo mismo (en lugar de utilizar el programa de 4 megas).
[edit] El software se actualiza con frecuencia, por lo que los archivos DLL son muy preferidos a los enlaces estáticos. [/editar]
¿Cómo puedo distribuir con éxito los archivos necesarios pero mantener bajos los gastos generales?
Instálelos como conjuntos privados. Mira aquí:
http://msdn.microsoft.com/en-us/library/ms235291.aspx
Tenga en cuenta que si no necesita todas las DLL proporcionadas, puede modificar los archivos de manifiesto para que solo hagan referencia a las que necesita.
Usamos esto: Cómo: implementar aplicaciones VC2008 sin instalar vcredist_x86.exe
Esencialmente
- No incruste un manifiesto en sus archivos exe.
- Copie las DLL de C ++ y sus manifiestos al directorio de su aplicación.
- Elimine el "publicKeyToken" de todos los manifiestos (el suyo y el de Microsoft).
- Si es necesario, cambie la información de la versión en los archivos de manifiesto de su aplicación para que coincida con los archivos de manifiesto de Microsoft (o viceversa)
[Soy el actual mantenedor de SxS en Microsoft]
Sugeriría que no se elimine el atributo publicKeyToken de los manifiestos. El despliegue privado de los dlls funcionará bien con este atributo dejado intacto. Sin embargo, eliminarlo evitará que su aplicación se beneficie de las actualizaciones de seguridad en caso de que haya una versión más reciente de la CRT instalada centralmente en la máquina de destino, ya que las dependencias ya no coincidirán.
Por lo tanto, para resumir: es seguro insertar su manifiesto, con el valor predeterminado. Copie los archivos manifold de CRT + DLL directamente en el directorio de su ejecutable, sin modificaciones. Eso es. Compatible con Win2k +.