// 
// 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 expresasni 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.Diagnostics;
using System.Management;
using System.IO;

namespace InstaladorATENEO
{
    public partial class FAltaMotor : Form
    {
        bool instaladoBrowser;
        public FAltaMotor()
        {
            InitializeComponent();
            this.openFileDialog1.Filter = "EXE files (*.exe)|*.exe";
            buscarSql();
            if (instaladoBrowser)
            {
                button1.Enabled = false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string fichero = openFileDialog1.FileName;
                string patFicheroexe = openFileDialog1.SafeFileName;
                patFicheroexe = fichero.Substring(0, fichero.Length - patFicheroexe.Length);
                button1.Enabled = false;
                instalaMotor(fichero, patFicheroexe);
            }
        }
        void instalaMotor(string fichero, string patFicheroexe)

        {
            string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            appPath = appPath + "\\ConfiguracionSQL08.ini";
            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;
            }

            if (File.Exists(patFicheroexe + "\\ConfiguracionSQL08.ini")) File.Delete(patFicheroexe + "\\ConfiguracionSQL08.ini");

         
            //      darPermisos(patOriginal);
            File.Copy(appPath, patFicheroexe + "\\ConfiguracionSQL08.ini");
            string opciones = " /qs /ConfigurationFile=ConfiguracionSQL08.ini";
            string comando = fichero + opciones;
          //  string comando = fichero +" /qs /ConfigurationFile=" + appPath;
            if (instaladoBrowser)
            {
                MessageBox.Show("SQLServer ya instalado. Hay que desinstalarlo previamente.");
                return;

            }
            ExecuteCommand(comando, patFicheroexe,opciones);
            return;
        }
        void ExecuteCommand(string _Command, string direcTraba, string opciones)
        {
            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);
            System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo();            
            // Indicamos que la salida del proceso se redireccione en un Stream 
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.UseShellExecute = false;
            procStartInfo.WorkingDirectory = direcTraba;
            procStartInfo.Verb = "runas";

            procStartInfo.FileName = "cmd.exe";
            procStartInfo.Arguments = "/c " + _Command;
            procStartInfo.UseShellExecute = false;
            procStartInfo.CreateNoWindow = true;
            procStartInfo.RedirectStandardOutput = true;
            procStartInfo.Verb = "runas";
          




          //  procStartInfo.FileName = _Command + " " + opciones;
            //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
            MessageBox.Show("La aplicacion se cerrara.\n Vuelva a ejecutarla cuando finalize el proceso de \ninstalacion de SQL Server");
            Application.Exit();
            Cursor.Current = Cursors.Default;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string appPathP = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            appPathP = appPathP + "\\InstalarManual.pdf";
            //Process p = new Process();
          //  ProcessStartInfo s = new ProcessStartInfo();
          //  s.FileName = "AcroRd32.exe";
          //  s.Arguments = appPathP;
          //  Process p = new Process();
           // p.StartInfo = s;
           // p.StartInfo.
            Process.Start(appPathP);
        }
        void buscarSql()
        {
            instaladoBrowser = false;
            try
            {
          
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Service WHERE Name = 'SQLBrowser'");


                foreach (ManagementObject queryObj in searcher.Get())
                {
                
                    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"));
                    if (queryObj["Started"].ToString() == "True")
                    {
                        instaladoBrowser = true;

                    }
                    instaladoBrowser = true;

                    //     buscarOsql(loca);


                }
                

            }
            catch (ManagementException e)
            {
            }



        }


    }
}
