Tutorial: Utilizar una acción personalizada para precompilar un ensamblado durante la instalación

Actualización: noviembre 2007

Las acciones personalizadaspermiten especificar acciones adicionales que se van a realizar en el equipo de destino al final de la instalación. Por ejemplo, en este tutorial, el nombre de la ruta de acceso de una DLL se transfiere a la propiedad CustomActionData para precompilar el ensamblado al código nativo durante la instalación.

Nota:

Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Nota:

En las siguientes instrucciones se detalla cómo se crea un proyecto de implementación utilizando un proyecto de Visual Basic; los principios generales se aplican a todos los proyectos de lenguajes de Visual Studio que admiten la implementación de aplicaciones para Windows.

Para crear la clase de acción personalizada

  1. En el menú Archivo, haga clic en Nuevoproyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Proyectos de Visual Basic en el panel Tipo de proyecto y, a continuación seleccione Biblioteca de clases en el panel Plantillas. En el cuadro Nombre, escriba InstallClass.

  3. En el menú Proyecto, elija Agregar nuevo elemento.

  4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase del instalador. En el cuadro Nombre, escriba InstallClass.vb. Haga clic en Agregar para agregar la clase al proyecto.

Para agregar código a la acción personalizada

  1. En el Explorador de soluciones (o en la superficie de diseño), haga clic con el botón secundario del mouse en InstallClass.vb y, a continuación, haga clic en Ver código para abrir el Editor de código. Agregue el código siguiente en la parte superior del módulo, bajo Imports System.Configuration.Install:

    Imports System.Runtime.InteropServices
    Imports System.Text
    
  2. En InstallClass.vb, agregue la declaración siguiente debajo de Public Class InstallClass:

    Private Declare Function GetCORSystemDirectory Lib "mscoree.dll" _
      (<Runtime.InteropServices.MarshalAs( _
      System.Runtime.InteropServices.UnmanagedType.LPWStr)> _
      ByVal Buffer As System.Text.StringBuilder, _
      ByVal BufferLength As Integer, ByRef Length As Integer) As Integer
    
  3. En InstallClass.vb, después de la instrucción End Sub de MyBase.New, agregue el procedimiento siguiente para reemplazar el procedimiento Install de la clase base:

    <Security.Permissions.SecurityPermission(Security.Permissions.SecurityAction.Demand)> _
    Public Overrides Sub Install(ByVal savedState As _
      System.Collections.IDictionary)
    
       MyBase.Install(savedState)
       Dim Args As String = Me.Context.Parameters.Item("Args")
    
       If Args = "" Then
          Throw New InstallException("No arguments specified")
       End If
    
       ' Gets the path to the Framework directory.
       Dim Path As New System.Text.StringBuilder(1024)
       Dim Size As Integer
       GetCORSystemDirectory(Path, Path.Capacity, Size)
    
       Dim P As Process
       ' Quotes the arguments, in case they have a space in them.
       Dim Si As New ProcessStartInfo(Path.ToString() & "ngen.exe", Chr(34) _
         & Args & Chr(34))
       Si.WindowStyle = ProcessWindowStyle.Hidden
       Try
          P = Process.Start(Si)
          P.WaitForExit()
       Catch e As Exception
          Throw New InstallException(e.Message)
       End Try
    End Sub
    

Para agregar un proyecto de implementación

  1. En el menú Archivo, elija Agregar y, después, haga clic en Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, seleccione Proyectos de instalación e implementación en el panel Tipo de proyecto y, a continuación, seleccione Proyecto de instalación en el panel Plantillas. En el cuadro Nombre, escriba Instalador de InstallClass.

  3. En la ventana Propiedades, seleccione la propiedad ProductName y escriba InstallClass.

  4. En el Editor del sistema de archivos, seleccione la Carpeta de la aplicación. En el menú Acción, elija Agregar y, después, haga clic en Resultados del proyecto.

  5. En el cuadro de diálogo Agregar grupo de resultados del proyecto, seleccione el resultado principal para el proyecto InstallClass y, a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo.

Para agregar la acción personalizada

  1. Seleccione el proyecto Instalador de InstallClass en el Explorador de soluciones. En el menú Ver, elija Editor y, a continuación, haga clic en Acciones personalizadas.

  2. En el Editor de acciones personalizadas, seleccione el nodo Acciones personalizadas. En el menú Acción, elija Agregar acción personalizada.

  3. En el cuadro de diálogo Seleccionar elemento en el proyecto, haga doble clic en la Carpeta de la aplicación y, a continuación, seleccione Resultado principal desde InstallClass (activa). Haga clic en Aceptar para agregar la acción personalizada InstallClass a los cuatro nodos de acción personalizada.

  4. Seleccione el nodo Resultado principal desde InstallClass (activa) situado bajo el nodo Instalar.

  5. En la ventana Propiedades, seleccione la propiedad CustomActionData y escriba /Args="[TARGETDIR]InstallClass.dll". Incluya las comillas.

  6. Repita esta operación para cada una de las otras tres instancias de Resultado principal desde InstallClass (activa).

  7. En el menú Generar, elija Generar Instalador de InstallClass.

Para instalar en el equipo de desarrollo

  • Seleccione el proyecto Instalador de InstallClass en el Explorador de soluciones. En el menú Proyecto, elija Instalar.

    Nota:

    Debe tener los permisos de instalación del equipo para poder ejecutar el instalador.

Para implementar en otro equipo

  1. En el Explorador de Windows, navegue hasta el directorio del proyecto y busque el instalador que se ha generado. La ruta de acceso predeterminada será \Documents and Settings\suNombreDeInicioDeSesión\Mis documentos\Visual Studio 2005\Proyectos\Nombre de la carpeta de soluciones\Instalador de My Notepad\configuración de proyecto\My Notepad Installer.msi. La configuración de proyecto predeterminada es Debug o Release.

  2. Copie el Instalador de InstallClass.msi, Setup.exe y otros archivos y subdirectorios en el directorio del otro equipo.

    Nota:

    Para realizar una instalación en un equipo que no esté en red, copie los archivos en un soporte tradicional, como un CD-ROM.

  3. En el equipo de destino, haga doble clic en el archivo Setup.exe para ejecutar el instalador.

    Nota:

    Debe tener los permisos de instalación del equipo para poder ejecutar el instalador.

Para probar la instalación

  • navegue a la carpeta del ensamblado %windir%\assembly (por ejemplo, C:\Windows\assembly) y busque InstallClass. En la columna Tipo, su tipo debe estar marcado como Imágenes nativas.

Para desinstalar la aplicación

  1. En el Panel de control de Windows, haga doble clic en Agregar o quitar programas.

  2. En el cuadro de diálogo Agregar o quitar programas, seleccione Instalador de InstallClass y haga clic en Quitar; a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo.

    Sugerencia:

    Para desinstalar la aplicación en el equipo de desarrollo, elija Desinstalar en el menú Proyecto.

Vea también

Conceptos

Compilar MSIL a código nativo

Referencia

CustomActionData (Propiedad)

Generador de imágenes nativas (Ngen.exe)

Otros recursos

Administración de acciones personalizadas en la implementación