none
Crear instaldor con inno setup o algun otro programa con base de datos mysql y vb.net

    Question

  • Hola ,

    he buscado mucho en la web sobre como crear un instalador de mi aplicativo hecho en vb.net el cual utiliza base de datos mysql. pero la verdad no he encontrado mucho sobre este tema.

    lo que necesito es crear el instalador de mi programa el cual instale los componentes necesarios para que funcione como el framework 4.0 , cristal reports , el programa en vb.net y posteriormente instale mysql , cree los usuarios de la bd , inicie los servicios de mysql y cree la base de datos con el archivo sql. que contiene toda la estructura de la bd.

    todo esto haciendo que el usuario solo de siguiente, siguiente siguiente y finalizar.

    sin que se de cuenta que se instalo el framework y las otras cosas.

    me han recomendado utilizar un programa que se llama inno setup.

    pero no he encontrado casi información.

    por favor si alguien sabe como crear el instalador con el inno setup o cualquier otro programa me ayudan con algo de información.

    Gracias

    Friday, April 26, 2013 8:03 PM

All replies

  • Bueno, aparte de inno setup descargate istool para innosetup. Muchos usan ClickOnce pero yo prefiero innosetup con istool.
    Es un poco complejo de explicar, pero te hago un resumen.
    En tu proyecto de Visual Studio, create una carpeta dentro de bin->Release (directorio donde está el proyecto compìlado) que se llame "Installers", allí vas a colocar el exe del framework.net 4 y el exe de mysql server, ahora paso explicar como instalar ambos durante la instalación del programa:
    Una vez descargado el istool , creas un nuevo proyecto File->New.
    Si te fijás en el árbol de la izquierda hay un nodo llamado "Files and Dirs", donde se va a colocar los archivos del proyecto y las carpetas, hacé doble click, allí vas a arrastrar la carpeta Installers que creaste (que va a incluir los executables de mysql y framework.net, el del framework se llama dotNetFx40_Full_x86_x64.exe si es la versión 4 y el de mysql mysql-5.5.19-win32.msi si es la versión 5.5.19) a la grilla que aparece a la derecha del árbol. También en la grilla vas a tener que arrastrar el executable del proyecto que hiciste y las dll que necesitás, por ejemplo el conector de mysql. 
    Una vez hecho esto, se necesita agregar los programa auxiliares que se necesitan como mysql, entonces en el árbol de la izquierda hay un nodo llamado "Install Run", hacés doble click en el nodo y allí
    sobre la grilla de la derecha, tenés que presionar el botón derecho del mouse y presionar en "New Item", se va a abrir una ventana y allí en filename seleccionás {app}\Installers\dotNetFx40_Full_x86_x64.exe
    En parámetros de la misma ventana, colocás lo siguiente /passive /norestart (este parámetro va a hacer que sólo se muestre una barra de progreso mientras se instala el framework, sin preguntarle nada al cliente).
    En Working Dir seleccionás {app}\Installers.
    Luego ahí no seleccionás más nada y presionás en Apply y luego en Ok.
    Mysql es un poco mas complejo de instalar en forma silenciosa, así que no lo vamos a instalar en el instalador, hay que instalarlo luego en el primer inicio de la aplicación de una manera que no le muestre al usuario las opciones de mysql ni nada de eso.
    Ahora también necesitamos indicarle que ejecute el archivo de nuestro proyecto por último y entonces nuevamente botón derecho y new item y colcamos en filename {app}\MYSISTEMA.exe donde MYSISTEMA.exe es el nombre del ejecutable de tu proyecto y en working dir simplemente seleccionás {app}.
    En el nodo Uninstall Delete colocamos lo que queremos que se borre cuando se quiera desinstalar (el MYSISTEMA.exe va seguro). En Unistall Run yo no coloco nada.
    Luego de todo esto, hay cosas como el nodo Icon ponemos los iconos que queremos para cada archivo, principalmente el ícono que queremos que tenga nuestra aplicación MYSISTEMA.exe en el destokp del grupo del menu, etc...
    Luego en Registry colocamos la clave que queremos que aparezca en el registro, pero yo prefiero hacerlo desde C# o VB.NET como con la instalación de MYSQL.

    Además si apretás en el botón "options" que está arriba de todo, te va a aparecer una ventana con varias pestañas en la cuál podrás colocar las opciones, por ejemplo colores, nombre del proyecto y cómo querés que aparezca en el usuario ese nombre, la versión, cualquier cosa consultame.
    Una vez configurado todo, debés apretar en "play" para compilar el instalador.

    En C# es así la función para instalar mysql (esto seria muy complejo de hacer en el mismo instalador), deberías además crear una función que consulte en el registro si está instalado mysql, si no está instalado, instalarlo, para VB.Net traducilo con: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    static void ModoServidor()
    {

    //Instalo MySQL
    string ruta=Application.StartupPath;
    bool problemas=false;
    //Le paso que el directorio por defecto sea el del ejecutable
    Directory.SetCurrentDirectory(ruta);
    Directory.CreateDirectory(@"C:\MySQL");

    string installermysql="/i \"Installers\\mysql-5.5.19-win32.msi\" /qn INSTALLDIR=\"C:\\MySQL\" "+
    "DATADIR=\"C:\\MySQL\" /log \"C:\\MySQL\\mysql-log.txt\"";
    string x="msiexec";
            Process oProc = newProcess();
    try{
            oProc.StartInfo.RedirectStandardInput = true;
            oProc.StartInfo.RedirectStandardOutput = true;

            oProc.StartInfo.CreateNoWindow=true;
            oProc.StartInfo.UseShellExecute = false;
            oProc.StartInfo.FileName = x;
            oProc.StartInfo.Arguments = installermysql;
            oProc.Start();
            oProc.WaitForExit();
            oProc.Close();
    }catch{problemas=false;}

    //Configuro MySQL


    string installerarguments="-i -q \"-lC:\\mysql_install_log.txt\" \"-nMySQL Server\" \"-pC:\\MySQL\" "+
    "\"-tC:\\mysql\\my-template.ini\" \"-cC:\\mysql\\my.ini\" ServerType=DEVELOPMENT "+
    "DatabaseType=MIXED SkipNetworking=no Charset=utf8 ConnectionUsage=DSS "+
    "Port=3305 ServiceName=MySQL5.5 RootPassword=my_pass";
    x=@"C:\MySQL\bin\mysqlinstanceconfig.exe";
    try{
            oProc = newProcess();
            oProc.StartInfo.RedirectStandardInput = false;
            oProc.StartInfo.RedirectStandardOutput = true;

            oProc.StartInfo.CreateNoWindow=true;
            oProc.StartInfo.UseShellExecute = false;
            oProc.StartInfo.FileName = x;
            oProc.StartInfo.Arguments = installerarguments;
            intPROGRESO=60;
            oProc.Start();
            oProc.WaitForExit();

            oProc.Close();
    }catch{problemas=false;}


    //Doy Permisos para acceso Remoto ya que solamente SkipNetworking=no no sirve      
    string superroot="--host=localhost --port=3305 --user=root --password=my_pass -e \"GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'my_pass' WITH GRANT OPTION; FLUSH PRIVILEGES;\"";
    x=@"C:\MySQL\bin\mysql.exe";
    try{
            oProc = newProcess();
            oProc.StartInfo.RedirectStandardInput = false;
            oProc.StartInfo.RedirectStandardOutput = true;

            oProc.StartInfo.CreateNoWindow=true;
            oProc.StartInfo.UseShellExecute = false;
            oProc.StartInfo.FileName = x;
            oProc.StartInfo.Arguments = superroot;
            oProc.Start();
            intPROGRESO=90;
            oProc.WaitForExit();
            intPROGRESO=95;
            oProc.Close();
    }catch{problemas=false;}

    if(problemas)
    {
    clavreg.LeerArchivoClaves(true);
    clavreg.CrearClaves(true);
    MessageBox.Show("Se ha instalado MySQL 5.5.");

    }
    else
    MessageBox.Show("Problemas al instalar MySQL 5.5.\nVerifique que se ha instalado el motor debidamente.\n");
    }

    (my_pass es el pass que vas a usar en mysql)
    "Installers\\mysql-5.5.19-win32.msi"---> es el msi de instalación de mysql (pueda que tenga otro nombre)
    Si entendiste todo este lío, una vez instalada el motor de la bd, vas a tener que usar la siguiente función para instalar tu base de datos de tu sistema:

    public bool CrearDataBaseEmpresas()
    {
        string ruta=Application.StartupPath;
        //Le paso que el directorio por defecto sea el del ejecutable
        Directory.SetCurrentDirectory(ruta);
            stconexion.server="localhost";
    bool exito_si_no=true;
            string script="";
            StreamReader file;
            try{
            file=new StreamReader("DATA\\my_bd.sql");
            script=file.ReadToEnd();
            file.Close();
            }catch{
                script=auxempresas;//Por si las moscas no encuentra el archivo
            }
            
    try
    {
    x+=@"bin\mysql.exe";
     
    Process oProc = new Process();
            oProc.StartInfo.RedirectStandardInput = false;
            oProc.StartInfo.RedirectStandardOutput = true;
           
            oProc.StartInfo.CreateNoWindow=true;
            oProc.StartInfo.UseShellExecute = false;
            oProc.StartInfo.RedirectStandardInput=true;
            oProc.StartInfo.FileName = x;//\\bin\\mysqldump.exe";
            oProc.StartInfo.Arguments = "--host=localhost --port=3305 --user=root --password=my_pass";//+" --databases "+stconexion.database+" < ";
            oProc.Start();
         
          StreamWriter myStreamWriter = oProc.StandardInput;
          myStreamWriter.Write(script);
          myStreamWriter.Close();
            oProc.WaitForExit();
            oProc.Close();
        }
        catch{exito_si_no=false;MessageBox.Show("Problemas al crear la Base de Datos.");}
      } "DATA\\my_bd.sql"--->es la estructura de tu bd, hecha por ejemplo con Workbench

    Si el sistema va a estar como cliente, no tenes que instalar la bd, sólo el conector y en vez de colocar localhost, debés colocar la ip del servidor.
    Bueno, cualquier cosa me consutás, espero haberte ayudado medianamente.
    El siguiente sistema lo hice con este método, descargalo y probalo, así que funciona: https://dl.dropbox.com/u/85211281/InstallMegalOSoftSG.exe , la contraseña del instalador es 6744FED0-800E-4354-B0E1-F42C9597B426 
    Saludos.




                                                                                   

    BECKLESPINAX



    Saturday, April 27, 2013 4:11 PM
  • Muchas Gracias , por la ayuda =)

    Lo que debo agregar en una clase de instalador verdad ?

    la agregue pero me envia error en esta variable


    stconexion.server="localhost";

    por fa , Me podrias decir que hace falta en el codigo que me pasaste.

    en esta linea especificas la ruta del archivo sql de la base de datos

    file=new StreamReader("DATA\\my_bd.sql");

    este archivo lo pusiste dentro de una carpeta con el nombre "DATA" ?

    Nuevamente muchas gracias. Ojala me funcione con tu ayuda. Saludos.


    • Edited by Sergio Andres R Monday, April 29, 2013 2:45 PM Me falto una pregunta Gracias.
    Monday, April 29, 2013 2:39 PM
  • Porque no utilizas el 

    InstallShield para VS. descargas la version 11 la instalas y este se integra al VS
    • Edited by Pcardoza Monday, April 29, 2013 8:29 PM
    Monday, April 29, 2013 8:27 PM
  • Hola, me comí algunas cosas, exactamente file=new StreamReader("DATA\\my_bd.sql"); es tu base de datos que está en la carpeta Data (si utilizás Woekbench y no sabes como obtener el .sql de la estructura de tu base de datos, avisame y te explico), la carpeta Data creala también en el mismo lugar que la carpeta Installers que va a poseer el ejecutable de mysql y framework.net. Lo hice así para poner un poco de orden.

    En el caso de stconexion.server="localhost"; <--- Esto quitalo, pasó que al reformar un poco para que sea entendible, me olvidé de quitarlo, stconexion pertenecía a una estructura que yo hago con todos los datos de la conexión a la base de datos, como el pass, el user y la dirección del server. En caso de que la aplicación haga se derver, tenés que colocar localhost.

    Cualquier otro error consultame nuevamente. Saludos


    BECKLESPINAX

    Monday, April 29, 2013 9:18 PM
  • =) nada que me funciona este instalador, 

    Instala el framework , el cristal reports, el mysql, pero nada que consigo que me cree la base de datos, no crea el usuario ni nada.

    Y no encuentro nada en internet sobre este tema, jejej o no se buscar o no hay casi nada para esto

    seria mucha molestia la ayuda de ustedes con un video en youtube o en cualquier otra red social.

    o algun proyecto que tengan de ejemplo , que instale el mysql y cree la base de datos

    de verdad se los agradeceria toda la vida 

    Gracias =(

    Monday, May 06, 2013 8:44 PM