Compartir a través de


Escenarios de ejemplos de implementación

Actualización: noviembre 2007

Supongamos que tenemos MyApplication.exe y MyLibrary.DLL, generadas las dos con MFC. MyApplication.exe depende de MyLibray.DLL, las dos usan MFC en un archivo DLL compartido y las dos pueden ser archivos binarios nativos o mixtos (/clr). En el caso más simple, el asistente genera las dos sin cambiar la configuración predeterminada. Los ejemplos en esta sección describen cómo implementar esta aplicación en otro equipo en el que no esté instalado Visual Studio. Esta sección trata principalmente sobre la implementación de la versión de lanzamiento de esta aplicación; sin embargo, se indican los cambios necesarios para implementar la versión de depuración de una aplicación.

Nota:

Este CLUF no permite la redistribución de programas de Visual C++ de depuración. Sin embargo, puede implementarlos temporalmente a efectos de depuración. Vea el CLUF con los términos de licencia del software para Visual Studio 2008.

Configuración inicial

Hay tres equipos que se deben tener en cuenta en este escenario.

El equipo de desarrollo es en el que se genera la aplicación. Tiene instalado Visual Studio 2005 (STD, PRO o TS).

Los dos equipos de destino de implementación no tienen instalado Visual Studio 2005. El destino de implementación 1 es un equipo que ejecuta un sistema operativo que admite el enlace basado en manifiestos de aplicaciones con sus dependencias (Windows XP Home Edition, Windows XP Professional, Windows Server 2003, Windows Vista). El destino de implementación 2 ejecuta un sistema operativo sin esa compatibilidad (Windows 2000).

El objetivo es generar la aplicación en el equipo de desarrollo, implementarla en los dos equipos de destino y ejecutarla.

Preparación

Cuando se ha generado un binario de Visual C++ que se va a ejecutar en otro equipo, es necesario determinar de qué archivos DLL depende este binario. Una herramienta útil para esto es Dependency Walker. En este escenario, se deben considerar los archivos DLL de Visual C++, en particular CRT y MFC. Si abre la versión de depuración de MyApplication.exe en Visual Studio y examina sus recursos, podrá ver el recurso RT_MANIFEST. Éste es el manifiesto incrustado en el archivo binario. Si lo exporta y lo abre como un archivo XML, verá lo siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Esto significa que esta aplicación depende de estos ensamblados:

  • Ensamblado Microsoft.VC90.DebugCRT, versión 9.0.xxxxx.yy para x86

  • Ensamblado Microsoft.VC90.DebugMFC, versión 9.0.xxxxx.yy para x86

  • Ensamblado Microsoft.Windows.Common-Controls, versión 6.0.0.0 para x86

En el archivo binario de lanzamiento, verá esto:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Esto significa que esta aplicación depende de estos ensamblados:

  • Ensamblado Microsoft.VC90.CRT, versión 9.0.xxxxx.yy para x86

  • Ensamblado Microsoft.VC90.MFC, versión 9.0.xxxxx.yy para x86

  • Ensamblado Microsoft.Windows.Common-Controls, versión 6.0.0.0 para x86

Vería manifiestos similares en MyLibrary.dll, ambos para depuración y lanzamiento. Observe que el identificador de manifiesto es 1 para un archivo EXE y 2 para un archivo DLL. También, si el manifiesto no está incrustado en el binario, se almacena como <nombre_binario>.<extensión>.manifest y tiene el mismo contenido.

Nota:

Visual Studio 2005 no admite la compilación de aplicaciones de C++ sin manifiestos ni el enlace a bibliotecas de Visual C++ como se hacía anteriormente mediante % PATH%. Además, los archivos DLL de Visual C++ pueden detectar este hecho, evitar que se cargue el archivo DLL y notificar la incompatibilidad del escenario y los cambios necesarios. No utilice /manifest:no ni elimine el manifiesto.

Método de implementación

En este ejemplo, instalará MyApplication.exe en una carpeta %TARGET% que puede ser especificada por el cliente durante la instalación. MyLibrary.dll se instalará en %TARGET%\MyLibrary, y \\MyLibrary se agregará a la ruta de acceso.

Examinaremos dos métodos para implementar aplicaciones de VC++:

  1. Generar un paquete de configuración mediante un Proyecto de instalación e implementación.

  2. Implementación de XCopy.

Para cada método, exploraremos dos escenarios:

  1. Implementar bibliotecas de Visual C++ como ensamblados compartidos.

  2. Implementar bibliotecas de Visual C++ como ensamblados privados.

En el escenario 1, hay sólo una copia de los archivos DLL de Visual C++ en la carpeta WinSxS. En el escenario 2, tendrá dos copias de los archivos DLL de Visual C++, instaladas en las carpetas locales de archivos EXE y DLL de la aplicación.

Nota:

El escenario 2 no se admite en Windows 2000 debido a los problemas que crea la implementación en carpetas locales de la aplicación a la hora del mantenimiento.

Vea también

Tareas

Cómo: Implementar un proyecto de instalación e implementación

Cómo: Implementar mediante XCopy

Conceptos

Ejemplos de implementación