1).Crear un proyecto de implementación.
1. En el menú Archivo, seleccione Agregar proyecto y luego seleccione Nuevo proyecto.
2. En el cuadro de diálogo Agregar nuevo proyecto, seleccione Proyectos de instalación e implementación en el panel Tipos de proyecto y luego seleccione Proyectos de instalación en el panel Plantillas. Escriba setup1 en el cuadro Nombre.
3. Haga clic en Aceptar para cerrar el cuadro de diálogo.
4. El proyecto se agrega al Explorador de soluciones y se abre el Editor del sistema de archivos.
5. En la ventana Propiedades, seleccione la propiedad ProductName y escriba Sistema de gestión de información.
2). Agregue la salida del proyecto del programa principal al proyecto de implementación.
1. En el Editor del sistema de archivos, seleccione Carpeta de aplicación. En el menú Acciones, seleccione Agregar y luego seleccione Resultado del proyecto.
2. En el cuadro de diálogo Agregar grupo de resultados del proyecto, seleccione Su programa en la lista desplegable Proyecto.
3. Haga clic en Aceptar para cerrar el cuadro de diálogo.
4. Seleccione los grupos Salida principal y Archivos de contenido de la lista y haga clic en Aceptar.
3).Crea la clase de instalador.
1. En el menú Archivo, seleccione Nuevo y luego seleccione Proyecto.
2. En el cuadro de diálogo Nuevo proyecto, seleccione Proyecto de Visual Basic en el panel Tipos de proyecto y luego seleccione Biblioteca de clases en el panel Plantillas. Escriba installDB en el cuadro Nombre.
3. Haga clic en "Abrir" para cerrar el cuadro de diálogo.
4. Seleccione Agregar nuevo elemento en el menú Proyecto.
5. Seleccione Clase de instalador en el cuadro de diálogo Agregar nuevo elemento. Escriba installDB en el cuadro Nombre.
6. Haga clic en Aceptar para cerrar el cuadro de diálogo.
7. Se adjunta código detallado.
4).Cree un cuadro de diálogo de instalación personalizado.
1. Seleccione el proyecto "setup1" en el Explorador de soluciones. En el menú Ver, seleccione Editor y luego seleccione Interfaz de usuario.
2. En el Editor de interfaz de usuario, seleccione el nodo Inicio en Instalación. En el menú Acción, seleccione Agregar cuadro de diálogo.
3. En el cuadro de diálogo Agregar cuadro de diálogo, seleccione el cuadro de diálogo Acuerdo de licencia y luego haga clic en Aceptar para cerrar el cuadro de diálogo.
4. En el cuadro de diálogo Agregar cuadro de diálogo, seleccione el cuadro de diálogo Cuadro de texto (A) y luego haga clic en Aceptar para cerrar el cuadro de diálogo.
5. En el menú Acción, seleccione Mover hacia arriba. Repita este paso hasta que el cuadro de diálogo Cuadro de texto (A) esté encima del nodo Carpeta de instalación.
6. En la ventana Propiedades, seleccione la propiedad BannerText y escriba: instalar base de datos.
7. Seleccione la propiedad BodyText y escriba: El instalador instalará la base de datos en la máquina de destino.
8. Seleccione la propiedad Edit1Label y escriba: nombre de la base de datos:
9. Seleccione la propiedad Edit1Property y escriba CUSTOMTEXTA1.
10. Seleccione la propiedad Edit1Value y escriba: dbservers
11. Seleccione la propiedad Edit2Label y escriba: nombre del servidor:
12. Seleccione la propiedad Edit2Property y escriba CUSTOMTEXTA2.
13. Seleccione la propiedad Edit2Value y escriba: (local)
14. Seleccione la propiedad Edit3Label y escriba: nombre de usuario:
15. Seleccione la propiedad Edit3Value y escriba: sa
16. Seleccione la propiedad Edit3Property y escriba CUSTOMTEXTA3.
17. Seleccione la propiedad Edit4Label y escriba: Contraseña:
18. Seleccione la propiedad Edit4Property y escriba CUSTOMTEXTA4
19. Seleccione las propiedades Edit2Visible, Edit3Visible y Edit4Visible y configúrelas en verdadero.
5).Crear operaciones personalizadas.
1. Seleccione el proyecto "setup1" en el Explorador de soluciones. En el menú Ver, seleccione Editor y luego seleccione Acciones personalizadas.
2. Seleccione el nodo Instalar en el editor de acciones personalizadas. En el menú Acciones, seleccione Agregar acción personalizada.
3. En el cuadro de diálogo Seleccionar elementos en el proyecto, haga doble clic en Carpeta de aplicación.
4. Seleccione el elemento "Salida principal de installDB (activo)" y haga clic en "Aceptar" para cerrar el cuadro de diálogo.
5. En la ventana Propiedades, seleccione la propiedad CustomActionData y escriba "/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]"".
Adjunto: /targetdir="[TARGETDIR]" es la ruta de destino después de la instalación. Para obtener la ruta después de la instalación en la clase installDB, configuramos este parámetro.
6). Agregue la función de desinstalación al empaquetar:
Método uno:
1. Agregue el archivo msiexec.exe al proyecto empaquetado (generalmente se encuentra en c:windowssystem32).
2. Seleccione la carpeta de la aplicación en la vista del sistema de archivos, haga clic derecho en msiexec.exe, seleccione Crear acceso directo y cambie el nombre del acceso directo a "Desinstalar".
3. Cambie los argumentos de este acceso directo a "/x {identificación del producto}", y el valor de la identificación del producto es el valor del atributo ProductCode del proyecto empaquetado.
Método 2: (recomendado)
1. Primero genere el paquete de instalación y escriba el código de producto (seleccione el directorio raíz del explorador de soluciones, como setup1, y luego verifique la etiqueta de propiedades, no las propiedades al hacer clic con el botón derecho), que se usará a continuación.
2. Utilice VS.net para crear un nuevo archivo uninst.exe del programa de consola
'poder por: propietario
'para 2000,xp,2003
Desinstalación del módulo
Subprincipal()
Atenuar myProcess como proceso = nuevo proceso
Si System.Environment.OSVersion.ToString.IndexOf("NT 5") Entonces
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") 'Cambie a su propio código de producto
Terminar si
miProceso.Cerrar()
Subtítulo final
Módulo final
3. Agregue el archivo exe en el directorio BIN del programa de consola al archivo de programa empaquetado y cree un acceso directo a uninst.exe en el grupo de programas.
clase installdb.vb, para agregar referencia a system.configuration.install.dll:
usando System;
usando System.Collections;
usando System.ComponentModel;
usando System.Configuration.Install;
usando System.Reflection;
usando System.IO;
usando System.Data;
usando System.Data.SqlClient;
instalación del espacio de nombres
{
/// <resumen>
/// Descripción resumida del instalador1.
/// </summary>
[EjecutarInstaller(verdadero)]
clase pública Installer1: System.Configuration.Install.Installer
{
/// <resumen>
/// Variables de diseñador requeridas.
/// </summary>
componentes privados System.ComponentModel.Container = nulo;
instalador público1()
{
// Esta llamada es requerida por el diseñador.
InicializarComponente();
// TODO: Agregar cualquier inicialización después de la llamada a InitializeComponent
}
/// <resumen>
/// Limpiar todos los recursos en uso.
/// </summary>
anulación protegida void Dispose (bool disposing)
{
si (desechando)
{
si (componentes! = nulo)
{
componentes.Dispose();
}
}
base.Dispose(eliminar);
}
#región Código generado por el diseñador del componente
/// <resumen>
/// Designer admite los métodos requeridos; no use el editor de código para modificar
/// El contenido de este método.
/// </summary>
vacío privado InicializarComponente()
{
componentes = nuevo System.ComponentModel.Container();
}
#regiónfinal
cadena privada GetSql (nombre de cadena)
{
// //Llama a osql para ejecutar el script
//
// System.Diagnostics.Process sqlProcess = nuevo System.Diagnostics.Process();
//
// sqlProcess.StartInfo.FileName = "osql.exe";
//
// sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["usuario"], este .Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
//
// sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//
// sqlProcess.Start();
//
// sqlProcess.WaitForExit() ;//Esperando ejecución
//
// sqlProcess.Close();
intentar
{
// Asamblea Asm = Asamblea.GetExecutingAssembly();
// System.IO.FileInfo FileInfo = nuevo System.IO.FileInfo(Asm.Location);
// cadena ruta=FileInfo.DirectoryName+@""+Nombre ;
ruta de cadena=this.Context.Parameters["targetdir"]+Nombre;
FileStream fs=new FileStream(ruta,FileMode.Open,FileAccess.Read,FileShare.Read);
Lector StreamReader = nuevo StreamReader(fs,System.Text.Encoding.Default);
//System.Text.Encoding.ASCII;
devolver lector.ReadToEnd();
}
captura (Excepción ex)
{
Console.Write("En GetSql:"+ex.Message);
tirar ex;
}
}
vacío privado ExecuteSql (cadena DataBaseName, cadena Sql)
{
SqlConnection sqlConnection1=nueva SqlConnection();
sqlConnection1.ConnectionString =string.Format("servidor={0}; ID de usuario={1}; contraseña={2}; Base de datos=maestro",this.Context.Parameters["servidor"],this.Context.Parameters[ "usuario"],this.Context.Parameters["contraseña"]);
System.Data.SqlClient.SqlCommand Comando = nuevo System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
intentar
{
Comando.Conexión.Open();
Command.Connection.ChangeDatabase(DataBaseName);
Comando.ExecuteNonQuery();
}
captura (Excepción ex)
{
Console.Write("En el controlador de excepciones:"+ex.Message);
}
finalmente
{
Comando.Conexión.Cerrar();
}
}
protegido vacío AddDBTable (cadena strDBName)
{
intentar
{
ExecuteSql("master","CREAR BASE DE DATOS "+ strDBName);
ExecuteSql(strDBName,GetSql("sql.txt"));
ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");
ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");
}
captura (Excepción ex)
{
Console.Write("En el controlador de excepciones:"+ex.Message);
}
}
anulación pública instalación vacía (System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
Aquí está sql.txt, que es el script sql de la base de datos. Por supuesto, puede llamar a osql para ejecutar el script sql.
El archivo sql.txt debe agregarse al empaquetar; de lo contrario, no se ejecutará.
Si desea adjuntar el archivo mdf y el archivo ldf de la base de datos, utilice el siguiente programa:
vacío privado CreateDataBase (cadena strSql, cadena DataName, cadena strMdf, cadena strLdf)
{
cadena cadena;
SqlConnection myConn = nueva SqlConnection (strSql);
//EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//Primero debes separar la base de datos
str = "EXEC sp_attach_db @dbname = '"+ DataName +"', @filename1 = '"+ strMdf +"',@filename2='"+strLdf+"'";
SqlCommand miCommand = nuevo SqlCommand(str, miConn);
miConn.Open();
myCommand.ExecuteNonQuery();
miConn.Close();
}
Por supuesto, estos dos archivos de base de datos también deben agregarse al empaquetar.