Elegir un método de implementación

Actualización: noviembre 2007

En la mayoría de los casos, la implementación de aplicaciones de Visual C++ se realiza con la implementación de Windows Installer. Para obtener más información sobre los métodos de implementación admitidos dentro de Visual Studio y los alternativos, vea Elegir una estrategia de implementación y Alternativas de implementación. La implementación de ClickOnce para aplicaciones nativas de Visual C++ no se admite en Visual Studio 2005; sin embargo, es posible implementar aplicaciones de Visual C++ a través de ClickOnce desde la línea de comandos. Para obtener más información, vea Implementación de ClickOnce para aplicaciones de Visual C++.

Las bibliotecas de Visual C++ son ensamblados simultáneos

Visual Studio 2005 instala las bibliotecas de Visual C++ como ensamblados en paralelo compartidos. De forma predeterminada, todas las aplicaciones generadas con Visual Studio 2005 se crean como aplicaciones aisladas con un manifiesto incrustado como recurso o acompañando al archivo binario final como archivo externo. Para asegurarse de que la aplicación de Visual C++ se ejecutará en un equipo que no tenga instalado Visual C++, puede que tenga que redistribuir los ensamblados de Visual C++ con la aplicación y comprobar que se instalan en el equipo de destino.

Redistribuir bibliotecas de Visual C++

Existen tres formas de redistribuir archivos DLL de Visual C++:

  1. Mediante módulos de combinación redistribuibles de Visual C++ para instalar una biblioteca de Visual C++ determinada en forma de ensamblados simultáneos compartidos en la caché de ensamblados nativa (carpeta WinSxS). Ésta es la forma recomendada de redistribuir bibliotecas de Visual C++. El acceso a esta carpeta requiere que la aplicación de instalación la ejecute un usuario con derechos administrativos. Para obtener más información, vea Redistribuir mediante módulos de combinación. Puede encontrar un ejemplo de esta implementación en Cómo: Implementar un proyecto de instalación e implementación.

  2. Mediante Visual C++ Redistributable Package (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_ia64.exe) para instalar todas las bibliotecas de Visual C++ como ensamblados simultáneos compartidos en la caché de ensamblados nativa (carpeta WinSxS). Visual Studio instala este paquete en la carpeta %WindowsSdkDir%\Bootstrapper\Packages\ y también se puede descargar desde el sitio de descargas de Microsoft Microsoft Visual C++ 2005 Redistributable Package (x86). Se recomienda redistribuir las bibliotecas de Visual C++ mediante este paquete en el caso de las aplicaciones generadas con Visual C++ Express y en aquellos casos en los que se deseen implementar todas las bibliotecas de Visual C++ a la vez. Para obtener un ejemplo de cómo usar este paquete, vea Cómo: Implementar mediante XCopy.

  3. Instale un ensamblado de Visual C++ específico como un ensamblado privado para la aplicación utilizando los archivos que se proporcionan en el directorio Archivos de programa\Microsoft Visual Studio 8\VC\Redist. Este es el procedimiento recomendado para habilitar la instalación de aplicaciones por parte de usuarios que no tienen derechos administrativos o cuando debería ser posible ejecutar una aplicación desde un recurso compartido. Para obtener un ejemplo, vea Cómo: Implementar mediante XCopy.

Nota:

En Windows Server 2000, el único modo recomendado y admitido para redistribuir bibliotecas de Visual C++ es el uso de módulos de combinación redistribuibles.

Al instalar bibliotecas de Visual C++ mediante módulos de combinación redistribuibles, los ensamblados se implementan como ensamblados en paralelo compartidos en la caché de ensamblados nativa (carpeta WinSxS). El acceso a esta carpeta requiere que la aplicación de instalación la ejecute un usuario con derechos administrativos.

Si la instalación la ejecuta un usuario que no tiene derechos administrativos, no se podrán implementar los ensamblados de Visual C++ y la aplicación no se ejecutará. Además, algunos productos pueden permitir la instalación de cada usuario, pero los módulos de combinación instalan bibliotecas en ubicaciones compartidas y afectarán a todos los usuarios del sistema. Para estos escenarios y otros similares, el método alternativo es instalar los ensamblados necesarios como ensamblados simultáneos privados de la aplicación de un usuario determinado.

Con esta técnica, basta con copiar una carpeta con los archivos DLL y de manifiesto de los ensamblados dependientes en la carpeta local de la aplicación. El cargador del sistema operativo, al ejecutar la aplicación, aún busca primero los ensamblados dependientes en la carpeta WinSxS; sin embargo, cuando no puede encontrar el ensamblado correspondiente, el cargador carga un ensamblado privado desde este subdirectorio.

La redistribución incorrecta de bibliotecas de Visual C++ puede producir errores en tiempo de ejecución durante la ejecución de una aplicación que depende de ellas. Puede encontrar una lista de posibles errores y sus soluciones en Solucionar problemas de aplicaciones aisladas y ensamblados simultáneos de C/C++.

Manifiesto necesario

No se admite la redistribución de aplicaciones de C/C++ que se hayan generado sin un manifiesto. Las aplicaciones de C/C++ no pueden utilizar bibliotecas de Visual C++ sin un manifiesto que enlace la aplicación a esas bibliotecas. Todos los archivos binarios de C/C++ generados en Visual C++ 2005 tienen que incluir un manifiesto que describa sus dependencias sobre las bibliotecas de Visual C++. Ésta es la instalación predeterminada de proyectos en Visual Studio y el comportamiento predeterminado del vinculador que genera el archivo binario final a partir del código objeto.

En todos los casos, se recomienda que el manifiesto sea interno. Sin embargo, en el caso de un archivo EXE, el manifiesto puede ser externo (este escenario, aunque se admite, no es recomendable).

Las aplicaciones que esperan la presencia de archivos DLL dependientes en la carpeta local de la aplicación o en una carpeta indicada por una variable de entorno también pueden ser vulnerables a ataques relacionados con la seguridad. Asimismo es más difícil mantener dichas aplicaciones una vez que se hayan implementado.

Es preferible la vinculación dinámica a la vinculación estática

No se recomienda redistribuir aplicaciones de C/C++ que estén vinculadas estáticamente a bibliotecas de Visual C++. A menudo se supone por error que vincular estáticamente el programa a bibliotecas de Visual C++ mejora significativamente el rendimiento de una aplicación. Sin embargo, el impacto en el rendimiento de las bibliotecas de Visual C++ cargadas dinámicamente es insignificante en casi todos los casos. Además, la vinculación estática no está permitida a la hora de mantener la aplicación y sus bibliotecas dependientes, ya sea por parte del autor de la aplicación o de Microsoft. Por ejemplo, piense en una aplicación que está vinculada estáticamente a una biblioteca particular, que se ejecuta en el equipo cliente con una nueva versión de esta biblioteca. La aplicación todavía sigue utilizando código de la versión anterior de esta biblioteca y no se beneficia de las mejoras de la biblioteca, como pueden ser las mejoras de seguridad. Se recomienda encarecidamente a los creadores de aplicaciones de C/C++ que estudien el escenario de mantenimiento antes de vincularlas estáticamente a bibliotecas dependientes, y utilizar la vinculación dinámica siempre que sea posible.

Vea también

Conceptos

Elegir una estrategia de implementación

Ejemplos de implementación

Otros recursos

Implementación (C++)

Información general sobre la implementación de Windows Installer

Implementación ClickOnce