Tutorial: Utilizar una acción personalizada para crear una base de datos en la instalación

En el siguiente tutorial se muestra el uso de una acción personalizada y de la propiedad CustomActionData para crear una base de datos y una tabla de base de datos durante la instalación.

Nota

Este tutorial requiere tener instalado SQL Server en el equipo donde se implementará la aplicación.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Nota

En las siguientes instrucciones se muestra cómo crear 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 basadas en Windows.

Para crear una clase del instalador

  1. En el menú Archivo, haga clic en Nuevo proyecto.

  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 DBCustomAction.

  3. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  4. En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase del instalador. En el cuadro Nombre, escriba VbDeployInstaller.vb.

Para crear un objeto de conexión de datos

  1. En el Explorador de servidores, seleccione Conexiones de datos. Haga clic con el botón secundario y, a continuación, haga clic en Agregar conexión.

  2. En el cuadro de diálogo Elegir origen de datos, seleccione Microsoft SQL Server.

  3. En el cuadro de diálogo Agregar conexión, realice lo siguiente:

    1. En la lista Nombre de servidor, escriba o seleccione un nombre de servidor.

    2. Seleccione Utilizar autenticación de Windows.

    3. En el cuadro de base de datos, escriba principal.

    4. Haga clic en Aceptar para cerrar el cuadro de diálogo.

  4. En el menú Datos, haga clic en Agregar nuevo origen de datos y, a continuación, use el asistente para agregar la conexión que estableció en los pasos anteriores. Para comprobar que el origen de datos está en el proyecto, haga clic en Mostrar orígenes de datos en el menú Datos.

Para crear un archivo de texto que contenga una instrucción SQL para crear una base de datos

  1. En el Explorador de soluciones, seleccione el proyecto DBCustomAction. En el menú Proyecto, haga clic en Agregar nuevo elemento.

  2. En el cuadro de diálogo Agregar nuevo elemento, haga clic en Archivo de texto. En el cuadro Nombre, escriba sql.txt (en minúsculas).

  3. Agregue el siguiente texto al archivo sql.txt:

    CREATE TABLE [dbo].[Employees] (
    [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Rsvp] [int] NULL ,
    [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
    ) ON [PRIMARY];
    
    ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD 
    CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
    (
    [Name]
    ) ON [PRIMARY];
    
  4. En el Explorador de soluciones, seleccione sql.txt. En la ventana Propiedades, establezca la propiedad BuildAction en Recurso incrustado.

Para agregar código a la clase del instalador que permita leer el archivo de texto

  1. En el Explorador de soluciones, seleccione VbDeployInstaller.vb. En el menú Ver, haga clic en Código.

  2. Agregue la siguiente instrucción Imports al principio del módulo:

    Imports System.IO
    Imports System.Reflection
    Imports System.Data.SqlClient
    
  3. Agregue el siguiente código a la clase VbDeployInstaller, después de la declaración MyBase.New:

    Public Class VbDeployInstaller
    
        Dim masterConnection As New System.Data.SqlClient.SqlConnection
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
            'Add initialization code after the call to InitializeComponent
    
        End Sub
    
        Private Function GetSql(ByVal Name As String) As String
            Try
    
                ' Gets the current assembly.
                Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
    
                ' Resources are named using a fully qualified name.
                Dim strm As Stream = Asm.GetManifestResourceStream(
                  Asm.GetName().Name + "." + Name)
    
                ' Reads the contents of the embedded file.
                Dim reader As StreamReader = New StreamReader(strm)
                Return reader.ReadToEnd()
    
            Catch ex As Exception
                MsgBox("In GetSQL: " & ex.Message)
                Throw ex
            End Try
        End Function
    
        Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
            Dim Command As New SqlClient.SqlCommand(Sql, masterConnection)
    
            ' Initialize the connection, open it, and set it to the "master" database
            masterConnection.ConnectionString = My.Settings.masterConnectionString
            Command.Connection.Open()
            Command.Connection.ChangeDatabase(DatabaseName)
            Try
                Command.ExecuteNonQuery()
            Finally
                ' Closing the connection should be done in a Finally block
                Command.Connection.Close()
            End Try
        End Sub
    
        Protected Sub AddDBTable(ByVal strDBName As String)
            Try
                ' Creates the database.
                ExecuteSql("master", "CREATE DATABASE " + strDBName)
    
                ' Creates the tables.
                ExecuteSql(strDBName, GetSql("sql.txt"))
    
            Catch ex As Exception
                ' Reports any errors and abort.
                MsgBox("In exception handler: " & ex.Message)
                Throw ex
            End Try
        End Sub
    
        Public Overrides Sub Install(
            ByVal stateSaver As System.Collections.IDictionary)
    
            MyBase.Install(stateSaver)
            AddDBTable(Me.Context.Parameters.Item("dbname"))
        End Sub
    
    End Class
    
  4. En el menú Generar, haga clic en Generar DBCustomAction.

Para crear un proyecto de implementación

  1. En el menú Archivo, haga clic en Agregar y, a continuación, en Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, abra el nodo Otros tipos de proyectos y seleccione Proyectos de instalación e implementación en el panel Tipo de proyecto. A continuación, seleccione Proyecto de instalación en el panel Plantillas. En el cuadro Nombre, escriba DBCustomAction_Setup.

  3. En la ventana Propiedades, seleccione la propiedad ProductName y escriba Instalador de DB.

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

  5. En el cuadro de diálogo Agregar grupo de resultados del proyecto, seleccione Resultado principal para el proyecto DBCustomAction.

Para crear un cuadro de diálogo de instalación personalizado

  1. Seleccione el proyecto DBCustomAction_Setup en el Explorador de soluciones. En el menú Ver, seleccione Editor y, a continuación, haga clic en Interfaz de usuario.

  2. En el Editor de la interfaz de usuario, seleccione el nodo Iniciar, situado bajo Instalar. En el menú Acción, haga clic en Agregar cuadro de diálogo.

  3. En el cuadro de diálogo Agregar cuadro de diálogo, seleccione el cuadro de diálogo Cuadros de texto (A) y, a continuación, haga clic en Aceptar.

  4. En el menú Acción, haga clic en Subir. Repita esta acción hasta que el cuadro de diálogo Cuadros de texto (A) quede situado encima del nodo Carpeta de instalación.

  5. En la ventana Propiedades, seleccione la propiedad BannerText y escriba Especificar nombre de la base de datos.

  6. Seleccione la propiedad BodyText y escriba Este cuadro de diálogo permite especificar el nombre de la base de datos que debe crearse en el servidor de bases de datos.

  7. Seleccione la propiedad Edit1Label y escriba Nombre de la base de datos:.

  8. Seleccione la propiedad Edit1Property y escriba CUSTOMTEXTA1.

  9. Seleccione las propiedades Edit2Visible, Edit3Visible y Edit4Visible y asígneles el valor False.

Para crear la acción personalizada

  1. Seleccione el proyecto DBCustomAction_Setup 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 Instalar. En el menú Acción, haga clic en 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.

  4. Seleccione Resultado principal de DBCustomAction (Active), luego haga clic en Aceptar para cerrar el cuadro de diálogo.

  5. Asegúrese de que el elemento Resultado principal de DBCustomAction (Active) esté seleccionado en el Editor de acciones personalizadas. En la ventana Propiedades, seleccione la propiedad CustomActionData y escriba /dbname=[CUSTOMTEXTA1]. Estos datos se pasan a la acción personalizada que se ejecuta al final de la instalación. Para obtener más información, vea CustomActionData (Propiedad).

  6. En el menú Generar, haga clic en Generar DBCustomAction_Setup.

Para instalar la aplicación en el equipo de desarrollo

  • Seleccione el proyecto DBCustomAction_Setup en el Explorador de soluciones. En el menú Proyecto, haga clic en Instalar.

    Esto hará que se ejecute el instalador en el equipo de desarrollo.

    Nota

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

Para implementar la aplicación en otro equipo

  1. En el Explorador de Windows, navegue hasta el directorio del proyecto y busque el instalador que se ha compilado. La ruta de acceso predeterminada será \documents and settings\nombreDeInicioDeSesión\DBCustomAction_Setup\configuración de proyecto\DBCustomAction_Setup.msi. La configuración del proyecto predeterminada es Debug.

  2. Copie DBCustomAction_Setup.msi y los demás archivos y subdirectorios del directorio en otro equipo.

    Nota

    Para instalar la aplicación en un equipo que no se encuentre en una red, copie los archivos en un soporte tradicional, como un CD-ROM.

    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 en el equipo para poder ejecutar el instalador.

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 DBCustomAction_Setup, haga clic en Quitar y, a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo.

    SugerenciaSugerencia

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

Vea también

Referencia

CustomActionData (Propiedad)

Conceptos

Control de errores en acciones personalizadas

Otros recursos

Administración de acciones personalizadas en la implementación