// 
// Copyright 2016 Agencia Estatal de Administración Tibutaria
//
// Licencia con arreglo a la EUPL, Versión 1.1 o -en cuanto
// sean aprobadas por la Comisión Europea- versiones
// posteriores de la EUPL (la «Licencia»);
// Solo podrá usarse esta obra si se respeta la Licencia.
// Puede obtenerse una copia de la Licencia en:
//  
// https://joinup.ec.europa.eu/software/page/eupl
//  
// Salvo cuando lo exija la legislación aplicable o se acuerde
// por escrito, el programa distribuido con arreglo a la
// Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
// DE NINGÚN TIPO, ni expresas ni implícitas.
//
// Véase la Licencia en el idioma concreto que rige los permisos y 
// limitaciones que establece la Licencia.
// 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Management;
using Microsoft.Win32;
using System.Diagnostics;
using System.Security.Principal;
using System.Threading;
using System.IO;
using System.Data.SqlClient;



namespace InstaladorATENEO
{
    public partial class Form1 : Form
    {
        bool instaladoAteneo = false;
        bool inicidoAteneo = false;
        bool instaladoBrowser = false;
        bool encontadoOSQL = false;
        string OSQLpath = "";
        bool reinicio = false;
        bool instalador = false;
        string sistemaOP = "0";
        bool esAdministrador = false;

        string pathTablas = "";
        string pathTablasg = "";
        List<String> valores = new List<string>();
        bool tengoPermisoLocal = false;
        bool primerUso = false;
        string nuevaPass = "";
        DataTable dt;
        //   System.Collections.Specialized.StringCollection values = new System.Collections.Specialized.StringCollection();

        public Form1() {
            InitializeComponent();
            dt = new DataTable();

        }

        private void button1_Click(object sender, EventArgs e) {
            valores.Clear();

            procesosObligatorios();
            if (checkAdministrador.Checked == false) {
                MessageBox.Show("Ejecutar Aplicacion como Administrador");

            }

        }
        
        void procesosObligatorios() {
            Cursor.Current = Cursors.WaitCursor;
            valores.Clear();
            pathTablas = "";
            richTextBox1.Text = "";
            versionNet();
            permisoAdministrador();
            encontadoOSQL = false;
            sistemaOP = "";
            versionInstalador();
            OSQLpath = "";
            buscarModelo();
            buscarSql();
            buscarSqlExpress();
            comprobarReinicio();
            mostrarBotones();
            bdAteneoFicheroG();
            Cursor.Current = Cursors.Default;

        }

        void cerrarBotones() {

            bBDAteneo.Enabled = false;
            bRed.Enabled = false;
        }

        void mostrarBotones() {
            cerrarBotones();
            //if (!checkAdministrador.Checked)
            //{
            //    MessageBox.Show("Ejecutar la aplicacion con permisos de Administrador");
            //    this.richTextBox1.AppendText("Ejecutar la aplicacion con permisos de Administrador");
            //    return;
            //}
            if (!checkNet.Checked) {
                MessageBox.Show("Instale NET Framework 4.0 o superior");
                this.richTextBox1.AppendText("Instale NET Framework 4.0 o superior");
                return;
            }
            if (!checkWInstaler.Checked) {
                MessageBox.Show("Actualice Windows Installer Component a 3.5 o superior (msiexec.exe)");
                this.richTextBox1.AppendText("Actualice Windows Installer Component a 3.5 o superior (msiexec.exe)");
                return;
            }
            if (!instaladoBrowser) {

                return;
            }
            if (!checkIniciadoAteneo.Checked) {
                bRed.Enabled = false;

                this.bBDAteneo.Enabled = false;
                return;
            }

            bBDAteneo.Enabled = true;
            //  if (pathTablas.Length > 3)
            //  {
            bRed.Enabled = true;
            return;
            //}
        }

        void permisoAdministrador() {
            try {
                Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

                WindowsPrincipal myUser = (WindowsPrincipal)Thread.CurrentPrincipal;
                esAdministrador = myUser.IsInRole(WindowsBuiltInRole.Administrator);
                if (esAdministrador) {
                    this.richTextBox1.AppendText("Permisos de Administrador = SI\n");
                    checkAdministrador.Checked = true;
                } else {
                    this.richTextBox1.AppendText("Permisos de Administrador = NO\n Reinicie la aplicacion con permisos de Administrador");
                    checkAdministrador.Checked = false;
                }

            } catch (Exception ex) {
            }
        }

        void buscarModelo() {
            try {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");

                foreach (ManagementObject queryObj in searcher.Get()) {

                    string tipo = queryObj["Architecture"].ToString();
                    if (tipo == "0") tipo = "x86";
                    if (tipo == "9") tipo = "x64";
                    this.richTextBox1.AppendText("    Arquitectura Procesador \n");

                    this.richTextBox1.AppendText("Tipo Procesador: " + tipo + "\n");
                    this.richTextBox1.AppendText((queryObj["Description"].ToString() + "\n"));
                    System.OperatingSystem osInfo = System.Environment.OSVersion;
                    this.richTextBox1.AppendText("    Sistema Operativo \n");
                    bool is64bit = true; //Environment.Is64BitOperatingSystem;
                    if (is64bit) {
                        sistemaOP = "64bit";
                        checkWin32.Checked = false;
                        checkWin64.Checked = true;

                    } else {
                        sistemaOP = "32bit";
                        checkWin32.Checked = true;
                        checkWin64.Checked = false;
                    }
                    this.richTextBox1.AppendText("Windows " + sistemaOP + "\n");
                    this.richTextBox1.AppendText(osInfo.VersionString + "\n");
                    string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);



                }
            } catch (ManagementException e) {
                this.richTextBox1.AppendText("Error en WMI: " + e.Message + "\n");
            }
        }

        void buscarSqlExpress() {
            instaladoAteneo = false;
            inicidoAteneo = false;
            try {
                checkInstaladoATENEO.Checked = false;
                checkIniciadoAteneo.Checked = false;
                checTablas.Checked = false;
                checkDirectorio.Checked = false;
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Service WHERE Name = 'MSSQL$ATENEO'");


                foreach (ManagementObject queryObj in searcher.Get()) {

                    this.richTextBox1.AppendText("    SQL Server ATENEO \n");
                    //   this.richTextBox1.AppendText((queryObj["Caption"].ToString() + "\n"));
                    string patBD = queryObj["PathName"].ToString();
                    this.richTextBox1.AppendText((queryObj["PathName"].ToString() + "\n"));
                    this.richTextBox1.AppendText("Inicido: " + (queryObj["Started"].ToString() + "\n"));
                    if (queryObj["Started"].ToString() == "True") {
                        inicidoAteneo = true;
                        checkIniciadoAteneo.Checked = true;
                    }

                    checkInstaladoATENEO.Checked = true;
                    instaladoAteneo = true;
                    bdAteneoFichero();
                    //   leerdatosfichero();
                    if (pathTablas.Length > 5) {
                        checTablas.Checked = true;
                        TengoAcceso();
                        if (tengoPermisoLocal) checkDirectorio.Checked = true;
                    }


                }
                if (instaladoAteneo == false) {
                    this.richTextBox1.AppendText("No se encontro el Servicio MSSQL$ATENEO \n");

                }

            } catch (ManagementException e) {
                this.richTextBox1.AppendText("Error en WMI: " + e.Message + "\n");
            }
        }

        void buscarSql() {
            instaladoBrowser = false;
            try {
                checkIniciadoSQLBrowser.Checked = false;
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Service WHERE Name = 'SQLBrowser'");


                foreach (ManagementObject queryObj in searcher.Get()) {
                    this.richTextBox1.AppendText("    SQL Server Browser \n");
                    string loca = queryObj["PathName"].ToString();
                    string cad = "Microsoft SQL Server";
                    loca = loca.Replace('"', ' ');
                    loca = loca.Trim();
                    int pos = loca.LastIndexOf("Microsoft SQL Server");
                    loca = loca.Substring(0, pos + cad.Length + 1);

                    //    this.richTextBox1.AppendText((queryObj["Caption"].ToString() + "\n"));
                    this.richTextBox1.AppendText((queryObj["PathName"]) + "\n");
                    this.richTextBox1.AppendText("Inicido: " + (queryObj["Started"].ToString() + "\n"));
                    if (queryObj["Started"].ToString() == "True") {
                        checkIniciadoSQLBrowser.Checked = true;
                    }
                    instaladoBrowser = true;

                    //     buscarOsql(loca);


                }
                if (instaladoBrowser == false) {
                    this.richTextBox1.AppendText("No se encontro el Servicio SQL Server Browser \n");

                }

            } catch (ManagementException e) {
                this.richTextBox1.AppendText("Error en WMI: " + e.Message + "\n");
            }



        }
        void TengoAcceso() {
            tengoPermisoLocal = false;
            try {
                foreach (string sArc in System.IO.Directory.GetFiles(pathTablas, "Ateneo*.*", System.IO.SearchOption.AllDirectories)) {
                    tengoPermisoLocal = true;
                }
            } catch (Exception ex) {
                tengoPermisoLocal = false;
                MessageBox.Show(ex.ToString());
                darPermisos(pathTablas);

            }
        }

        bool comprobarReinicio() {
            reinicio = false;
            RegistryKey rk1 = Registry.LocalMachine;
            rk1 = rk1.OpenSubKey(@"System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations");
            if (rk1 == null) {
                reinicio = false;
                this.richTextBox1.AppendText("Windows No necesita reinicio\n");
                return false;

            }

            this.richTextBox1.AppendText("Windows Necesita reinicio\n");
            return true;


        }
        void versionInstalador() {
            checkWInstaler.Checked = true;

            string ppp = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();
            string ppp2 = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();

            var resolvedPath = System.IO.Path.GetFullPath("%WINDIR%");

            System.Diagnostics.FileVersionInfo finfo = System.Diagnostics.FileVersionInfo.GetVersionInfo("C:\\Windows\\System32\\msiexec.exe");

            string version = finfo.FileVersion;
            string winfold = System.Environment.GetEnvironmentVariable("windir");
            // string wintemp = System.Environment.GetEnvironmentVariable("tep");


            this.richTextBox1.AppendText("Vesion del W.Instaler " + version + "\n");
            if (finfo.ProductMajorPart > 4) {
                instalador = true;

                return;
            }
            if ((finfo.ProductMajorPart > 3) && (finfo.ProductMinorPart > 4)) {
                instalador = true;
                return;
            }
            checkWInstaler.Checked = false;
            instalador = false;
        }

        void versionNet() {
            checkNet.Checked = false;
            RegistryKey installed_versions = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP");
            string[] version_names = installed_versions.GetSubKeyNames();
            //version names start with 'v', eg, 'v3.5'
            //we also need to take care of strings like v2.0.50727...
            richTextBox1.AppendText("NET Framework Instalados:\n");
            for (int v = 0; v < version_names.Length; v++) {
                richTextBox1.AppendText(version_names[v].ToString() + "\n");
            }
            string sCurrent = version_names[version_names.Length - 1].Remove(0, 1);

            if (sCurrent.LastIndexOf(".") > 1) {
                string[] sSplit = sCurrent.Split('.');
                sCurrent = sSplit[0] + "." + sSplit[1] + sSplit[2];
            }
            double dCurrent = Convert.ToDouble(sCurrent, System.Globalization.CultureInfo.InvariantCulture);
            double dExpected = Convert.ToDouble("4");
            if (dCurrent >= dExpected) {
                checkNet.Checked = true;
            }

        }


        void ejecutarInstalaMotor() {
            if (checkWin32.Checked) {
                if (!System.IO.File.Exists("SQLEXPR_x86_ESN.exe")) {
                    MessageBox.Show(" No se ha encontrado el fichero SQLEXPR_x86_ESN.exe en el dierectorio Actual");
                    return;
                }
                if (System.IO.File.Exists("ConfiguracionSQL08.ini")) {
                    System.IO.File.Delete("ConfiguracionSQL08.ini");

                }

                System.IO.File.AppendAllText("ConfiguracionSQL08.ini", InstaladorATENEO.Properties.Resources.ConfiguracionSQL08);
                if (!System.IO.File.Exists("ConfiguracionSQL08.ini")) {
                    MessageBox.Show(" No se ha encontrado el fichero ConfiguracionSQL08.ini en el dierectorio Actual");
                    return;
                }
                string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
                appPath = appPath + "\\ConfiguracionSQL08.ini";
                string comando = @"SQLEXPR_x86_ESN.exe /qs /ConfigurationFile=" + appPath;
                if (instaladoBrowser) {
                    MessageBox.Show("SQLServer ya instalado. Hay que desinstalarlo previamente.");
                    return;

                }
                ExecuteCommand(comando);
                return;
            }
            if (checkWin64.Checked) {
                if (!System.IO.File.Exists("SQLEXPR_x64_ESN.exe")) {
                    MessageBox.Show(" No se ha encontrado el fichero SQLEXPR_x64_ESN.exe en el dierectorio Actual");
                    return;
                }
                if (System.IO.File.Exists("ConfiguracionSQL08.ini")) {
                    System.IO.File.Delete("ConfiguracionSQL08.ini");

                }

                System.IO.File.AppendAllText("ConfiguracionSQL08.ini", InstaladorATENEO.Properties.Resources.ConfiguracionSQL08);
                if (!System.IO.File.Exists("ConfiguracionSQL08.ini")) {
                    MessageBox.Show(" No se ha encontrado el fichero ConfiguracionSQL08.ini en el dierectorio Actual");
                    return;
                }
                string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
                appPath = appPath + "\\ConfiguracionSQL08.ini";
                string comando = @"SQLEXPR_x64_ESN.exe /qs /ConfigurationFile=" + appPath;
                if (instaladoBrowser) {
                    MessageBox.Show("SQLServer ya instalado. Hay que desinstalarlo previamente.");
                    return;

                }
                ExecuteCommand(comando);
                return;
            }
        }

        void ExecuteCommand(string _Command) {
            Cursor.Current = Cursors.WaitCursor;

            //Indicamos que deseamos inicializar el proceso cmd.exe junto a un comando de arranque.             //(/C, le indicamos al proceso cmd que deseamos que cuando termine la tarea asignada se cierre el proceso).            //Para mas informacion consulte la ayuda de la consola con cmd.exe /?    
            System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + _Command);
            // Indicamos que la salida del proceso se redireccione en un Stream 
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            //Indica que el proceso no despliegue una pantalla negra (El proceso se ejecuta en background)     
            // procStartInfo.CreateNoWindow = true;
            //Inicializa el proceso          
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo = procStartInfo;
            proc.Start();
            proc.WaitForExit();
            //Consigue la salida de la Consola(Stream) y devuelve una cadena de texto
            string result = proc.StandardOutput.ReadToEnd();
            this.richTextBox1.Text = result;
            Cursor.Current = Cursors.Default;

        }

        private void button2_Click(object sender, EventArgs e) {
            cerrarBotones();
            if (checkAdministrador.Checked == false) {
                MessageBox.Show("Ejecutar con permisos de Administrador");
                return;
            }
            primerUso = true;
            ejecutarInstalaMotor();
        }

        private void button3_Click(object sender, EventArgs e) {

        }

        private void button3_Click_1(object sender, EventArgs e) {
            if (!comprobarUsuarioGeneral()) return;

            if (ejecutarPrimerUso() == false) return;


            if (checkAdministrador.Checked == false) {
                MessageBox.Show("Ejecutar con permisos de Administrador");
                return;
            }
            creaUsuario();
            FTablas tablas = new FTablas(nuevaPass);
            tablas.ShowDialog();
            string nuevadb = tablas.nuevabd;
            tablas.Dispose();
            if (nuevadb.Length < 3) return;
            if (System.IO.File.Exists(pathTablasg + nuevadb + ".mdf")) {
                //  if (pathTablas.Length > 3)
                // {
                //     DialogResult result3 = MessageBox.Show("La Base de Datos ATENEO ya esta Instalada\nSi continua se borraran todos los datos de ATENEO \nContinuar ?",
                //"Advertencia",
                //MessageBoxButtons.YesNoCancel,
                //MessageBoxIcon.Question,
                //MessageBoxDefaultButton.Button2);
                //     if (result3 != DialogResult.Yes) return;
                DialogResult result2 = MessageBox.Show("Si continua se borraran todos los datos de ATENEO de la Base de datos\n" + nuevadb + " \nContinuar ?",
          "Advertencia",
          MessageBoxButtons.YesNoCancel,
          MessageBoxIcon.Warning,
          MessageBoxDefaultButton.Button2);
                if (result2 != DialogResult.Yes) return;
            }
            cerrarBotones();
            borrarAteneo(nuevadb);
            creartablasAteneo(nuevadb);
            // creaUsuario();
            crearPermisosAteneo();
            procesosObligatorios();
            return;

        }

        bool comprobarUsuarioGeneral() {
            if (nuevaPass != "") return true;
            if (comprobarUsuario("ateneo04600AL") == 0) return true;
            if (comprobarUsuario("ateneo") == 0) return true;

            FPedirPas fp = new FPedirPas();
            fp.ShowDialog();
            string pp = fp.nuevaPass1;
            if (pp.Length > 5) {
                nuevaPass = pp;
                fp.Dispose();
                fp = null;
                return true;
            }
            fp.Dispose();
            fp = null;

            return false;

        }
        int comprobarUsuario(string pass) {

            if (existeUserServidor(pass) == -1) {
                nuevaPass = "";
                return -1;
            }
            nuevaPass = pass;
            return 0;
        }

        void creaUsuario() {
            if (existeUserServidor(nuevaPass) < 1) {
                string sqlout = "";
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + nuevaPass + " -Slocalhost\\Ateneo");
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardInput = true;
                psi.RedirectStandardError = true;
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

                proc.StandardInput.WriteLine(@"CREATE LOGIN [ServidorAteneo] WITH PASSWORD = 'oenetA' ,DEFAULT_LANGUAGE = [Spanish],  CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF");
                proc.StandardInput.WriteLine(@"GO");
                // proc.StandardInput.WriteLine(@"sp_addsrvrolemember 'ServidorAteneo', 'sysadmin'");
                proc.StandardInput.WriteLine(@"GO");
                //        sqlout += proc.StandardOutput.ReadToEnd();
                proc.StandardInput.WriteLine(@"sp_addsrvrolemember 'ServidorAteneo', 'sysadmin'");
                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"DBCC TRACEON(1807,-1)");
                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"EXIT");


                proc.Close();

            }
        }

        int existeUserServidor(string pass) {
            try {
                string sCnn = "data source =localhost\\Ateneo; initial catalog = Master; user id = sa; password = " + pass;
                string sSel = "select COUNT(*) as Total from master.dbo.syslogins where loginname = 'ServidorAteneo'";
                SqlConnection con = new SqlConnection(sCnn);
                con.Open();
                SqlCommand cmd = new SqlCommand(sSel, con);
                int total = 0;
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read()) {

                    total = (int)reader[0];

                }
                reader.Close();
                con.Close();
                return total;
            } catch (SqlException ew) {
                return -1;
            }
        }

        void creartablasAteneo(string nombrebd) {
            if (System.IO.File.Exists("ateneoUA10.sql")) {
                System.IO.File.Delete("ateneoUA10.sql");

            }
            System.IO.File.AppendAllText("ateneoUA10.sql", InstaladorATENEO.Properties.Resources.ateneoUA10);
            if (!System.IO.File.Exists("ateneoUA10.sql")) {
                MessageBox.Show(" No se ha encontrado el fichero ateneoUA10.sql en el dierectorio Actual");
                return;
            }

            string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            var fileContents = System.IO.File.ReadAllText("ateneoUA10.sql");

            fileContents = fileContents.Replace("XXXXXX", nombrebd);

            System.IO.File.WriteAllText("ateneoUA10.sql", fileContents);

            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + nuevaPass + " -Slocalhost\\Ateneo -i" + "ateneoUA10.sql");
            psi.WorkingDirectory = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            psi.RedirectStandardOutput = false;
            psi.RedirectStandardInput = false;
            psi.RedirectStandardError = false;
            psi.UseShellExecute = true;
            psi.CreateNoWindow = true;
            System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

            // sqlout += proc.StandardError.ReadToEnd();
            proc.WaitForExit(20000);
        }

        void crearPermisosAteneo() {
            if (System.IO.File.Exists("PrivilegiosServicioSQL.sql")) {
                System.IO.File.Delete("PrivilegiosServicioSQL.sql");

            }
            System.IO.File.AppendAllText("PrivilegiosServicioSQL.sql", InstaladorATENEO.Properties.Resources.PrivilegiosServicioSQL);
            if (!System.IO.File.Exists("PrivilegiosServicioSQL.sql")) {
                MessageBox.Show(" No se ha encontrado el fichero PrivilegiosServicioSQL.sql en el dierectorio Actual");
                return;
            }
            string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + nuevaPass + " -Slocalhost\\Ateneo -i" + "PrivilegiosServicioSQL.sql");
            psi.WorkingDirectory = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            psi.RedirectStandardOutput = false;
            psi.RedirectStandardInput = false;
            psi.RedirectStandardError = false;
            psi.UseShellExecute = true;
            psi.CreateNoWindow = true;
            System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

            // sqlout += proc.StandardError.ReadToEnd();
            proc.WaitForExit(5000);
        }

        void bdAteneoFichero() {
            if (!comprobarUsuarioGeneral()) {
                return;
            }
            string sCnn;
            sCnn = "data source =localhost\\Ateneo; initial catalog = Master; user id = sa; password =" + nuevaPass;
            // string sSel = "select Name,Filename,cmptlevel,crdate from master.dbo.sysdatabases WHERE name LIKE 'ateneo%'";
            string sSel = "select Name,Filename,cmptlevel,crdate from master.dbo.sysdatabases WHERE dbid > 4 ";
            SqlDataAdapter da;

            dt.Clear();
            try {
                da = new SqlDataAdapter(sSel, sCnn);

                da.Fill(dt);
                da.Dispose();
                if (dt.Rows.Count < 1) {
                    richTextBox1.AppendText("No se encontro Base Datos Ateneo\n");
                    label1.Text = "No se encontro Base Datos Ateneo";
                    pathTablas = "";
                    return;
                }
                if (dt.Rows.Count == 1) {
                    DataRow row1 = dt.Rows[0];
                    pathTablas = row1["Filename"].ToString();
                    string na = row1["Name"].ToString();
                    pathTablas = pathTablas.Substring(0, pathTablas.Length - na.Length - 4);
                    richTextBox1.AppendText("Base Datos en " + row1["Filename"].ToString() + "\n");
                    label1.Text = row1["Filename"].ToString();

                    return;
                }
                label1.Text = "Encontradas " + dt.Rows.Count + " Bases de datos";
                DataRow row2 = dt.Rows[0];
                pathTablas = row2["Filename"].ToString();
                string na2 = row2["Name"].ToString();
                pathTablas = pathTablas.Substring(0, pathTablas.Length - na2.Length - 4);
                foreach (DataRow row in dt.Rows) {


                    richTextBox1.AppendText(row["Filename"].ToString() + "\n");

                }
            } catch (Exception ex) {
                richTextBox1.AppendText("No se encontro Base Datos Ateneo\n");
                label1.Text = "No se encontro Base Datos Ateneo";
            }
        }

        void bdAteneoFicheroG() {
            if (!checkInstaladoATENEO.Checked) return;
            try {
                if (!comprobarUsuarioGeneral()) {
                    return;
                }
                valores.Clear();
                string sCnn;
                sCnn = "data source =localhost\\Ateneo; initial catalog = Master; user id = sa; password =" + nuevaPass;
                string sSel = "select Name, Filename from master.dbo.sysdatabases where name = 'master'";

                SqlDataAdapter da;

                dt.Clear();
                da = new SqlDataAdapter(sSel, sCnn);

                da.Fill(dt);
                da.Dispose();
                if (dt.Rows.Count < 1) {

                    pathTablasg = "";
                    return;
                }
                if (dt.Rows.Count == 1) {
                    DataRow row1 = dt.Rows[0];
                    pathTablasg = row1["Filename"].ToString();
                    string na = row1["Name"].ToString();
                    pathTablasg = pathTablasg.Substring(0, pathTablasg.Length - na.Length - 4);
                    return;
                }

            } catch (Exception ex) {
                richTextBox1.AppendText(ex.ToString() + "\n");
            }

        }

        void borrarAteneo(string nombref) {
            if (!checkInstaladoATENEO.Checked) return;
            try {
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + nuevaPass + " -Slocalhost\\Ateneo");
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardInput = true;
                psi.RedirectStandardError = true;
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

                proc.Start();
                proc.BeginOutputReadLine();


                proc.StandardInput.WriteLine(@"DROP DATABASE " + nombref);

                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"EXIT");

                proc.WaitForExit(5000);
                if (File.Exists(pathTablasg + nombref + ".mdf")) File.Delete(pathTablasg + nombref + ".mdf");
                if (File.Exists(pathTablasg + nombref + "_log.LDF")) File.Delete(pathTablasg + nombref + "_log.LDF");
            } catch (Exception ex) {

                MessageBox.Show(ex.ToString() + "\n Cierre la aplicacion y vuelva a intentarlo");
            }
        }

        void moverAred() {
            try {
                if (!comprobarUsuarioGeneral()) return;
                FormRed nuevo = new FormRed(pathTablas, nuevaPass);
                nuevo.ShowDialog();
                nuevo.Dispose();
                nuevo = null;
            } catch (Exception) {
            }
        }

        private void bRed_Click(object sender, EventArgs e) {
            if (checkAdministrador.Checked == false) {
                MessageBox.Show("Ejecutar con permisos de Administrador");
                return;
            }
            creaUsuario();
            moverAred();
            procesosObligatorios();

        }

        void darPermisos(string pat) {

            string nomcomputer = System.Environment.UserDomainName + "\\" + System.Environment.MachineName;

            string cadena = pat + "\\ateneo*.* /grant " + nomcomputer + "$:(F)";
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(@"c:\windows\system32\icacls.exe");
            startInfo.WorkingDirectory = pat;
            startInfo.Arguments = " Atene*.* /T /grant " + nomcomputer + "$:(F)";
            Process.Start(startInfo);

        }

        bool ejecutarPrimerUso() {
            try {
                System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("OSQL.exe", @"-Usa -P" + nuevaPass + " -Slocalhost\\Ateneo");
                psi.RedirectStandardOutput = true;
                psi.RedirectStandardInput = true;
                psi.RedirectStandardError = true;
                psi.UseShellExecute = false;
                psi.CreateNoWindow = true;
                System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);

                proc.StandardInput.WriteLine(@"DBCC TRACEON(1807,-1)");
                proc.StandardInput.WriteLine(@"GO");
                proc.StandardInput.WriteLine(@"EXIT");

                while (!proc.StandardOutput.EndOfStream) {
                    string line = proc.StandardOutput.ReadLine();
                }

                proc.Close();
                Application.DoEvents();
                return true;
            } catch (Exception ex) {
                MessageBox.Show(ex.ToString() + "\n\nCerrar aplicacion y volver a intentar");
                return false;
            }
        }

        private void Form1_Shown(object sender, EventArgs e) {
            // comprobarUsuarioGeneral();
            if (!System.IO.File.Exists("InstalarManual.pdf")) {

                File.WriteAllBytes("InstalarManual.pdf", InstaladorATENEO.Properties.Resources.InstalarManual);

            }
            permisoAdministrador();
            if (checkAdministrador.Checked == false) {
                bEstado.Enabled = false;
            }
            button1_Click(null, null);
            //System.IO.File.OpenWrite("InstalarManual.pdf", InstaladorATENEO.Properties.Resources.InstalarManual);
        }

        private void bmanual_Click(object sender, EventArgs e) {
            FAltaMotor fam = new FAltaMotor();
            fam.ShowDialog();
            fam.Dispose();
            fam = null;
            //if (!System.IO.File.Exists("InstalarManual.pdf"))
            //{
            //    return;

            //}
            //Process p = new Process();
            //p.StartInfo.FileName = "InstalarManual.pdf";
            //p.Start();
        }

    }
}
