2008-10-07 15 views
15

Estoy desarrollando en un entorno que está muy limitado, pero los desarrolladores también tienen un control estricto.Redistribuibles de Visual C++ sin utilizar VCRedist_x86.exe

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, Redistributing Visual C++ Files dice:

No se admite la redistribución de las aplicaciones C/C++ que se crean sin 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, consulte Choosing a Deployment Method.

Mi plan original de la copia de los archivos DLL en el directorio de trabajo del programa no parece trabajo en este nuevo mundo de los manifiestos.

Mi próxima conjetura es corroborar las entradas de registro necesarias para completar los archivos en el directorio de WinSxS y rellenarlos 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. [/ edit]

¿Cómo puedo distribuir con éxito los archivos necesarios pero mantener los gastos generales bajos?

Respuesta

13

Utilizamos esta: Howto: Deploy VC2008 apps without installing vcredist_x86.exe

Esencialmente

  • No te incrustar 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, cambiar la información de la versión de los archivos de manifiesto de tu aplicación para que coincida con los archivos de manifiesto de Microsoft (o viceversa)
4

Especifique/MT (multiproceso) para la configuración "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.

26

[Soy el actual mantenedor SxS en Microsoft]

Creo firmemente haría sugerir contra eliminando el atributo publicKeyToken de 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 incrustar 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 +.

+3

Hola Eugene: ¿Estás diciendo que si despliegas tu aplicación con DLL locales CRT/MFC/etc. y archivos de manifiesto, las actualizaciones de Windows que afectan a estos archivos de alguna manera los encontrarán en tu directorio de instalación y los actualizarán?!?! – HotOil

Cuestiones relacionadas