domingo, 25 de outubro de 2015

Programa para Reiniciar o Tef_Dial no Computador, Usando o instalador, mostrando o Código C#.


Aplicativo, Reiniciar Tef_Dial e o serviço Vpn no Windows.



Demostração da aplicação

     Vou mostra como fiz para construir um programa que desligue o TEF_DIAL, reinicie o serviço do Windows chamado de OPENVPNSERVICE, e ligue novamente o TEF_DIAL para corrigir erros no momento que esta passando cartão.

tela principal do aplicativo:

Figura - 01

     Como ver na tela principal da aplicação o nome principal "RETARTANDO GETCARD E SERVIÇO", o intuito como o próprio nome diz, e assim, foi construído a aplicação para reiniciar dois executáveis distintos no Windows, na tela foi criado um textbox para mostra o que esta sendo feito a cada momento de execução da aplicação.

Figura - 02

ao mesmo tempo foi colocado um botão grande para que o serviço seja reiniciado e o cliente seja liberado para sua venda.

Figura - 03


 Assim também foram criados trés chekbox para que o usuário necessite de algumas configurações amais,

Figura - 04

     O primeiro checkbox criado para ligar o Tef_Dial no processo que vai dar o stop de parada no mesmo, caso o sistema de automação tenha o comando que reinicie o mesmo como o paf-ecf devidamente homologado pelo fiscal do estado, o próximo checkbox foi criado para que o serviço da vpn seja reiniciado ou não, dependendo do Windows onde o aplicativo foi instalado e tem muito problema de conexão com o servidor que foi configurado o VPN, o outro checkbox Automaticamente ao reiniciar foi criado para que seja executado a aplicação de reinicialização não tenha a necessidade de clique no botão de "reiniciar o serviço", com isso rele automaticamente executa o que foi configurado.

Continuando com a explicação da aplicação temos um local de configuração para configurar os executáveis e o serviço que vai ser reiniciado.
clique no "<>" na parte superior da tela, como a imagem abaixo.

Figura - 05

 veja então que aparecera a tela principal de configuração como na figura abaixo.

Figura - 06

Nesta tela de configuração tem um botão "..." para procurar o executável do Tef_Dial.exe no computador que vai ser executado o programa do tef.

Figura - 07

O intuído foi para que não seja esquecido o local correto do executável Tef_Dial.exe e assim não ocorrer erros na aplicação, o próximo foi o nome do serviço no Windows para que não seja esquecido e ocasione erros na aplicação.

Caso o Ícone não seja configurado para iniciar como administrador do windows acarretar o seguinte erro na tela de apresentação da aplicação.

Figura - 08

Sua configuração deverá ser feita diretamente no ícone na área de trabalho como vou mostra a seguir.

Figura - 09

veja como deve ser feito nas propriedades do ícone acima.

Figura - 10

Caso esta configuração não seja executada o serviço do Windows não reiniciara e ao mesmo tempo ocorrera um erro na tela.

Continuando o processo de reinicialização do executável Tef_Dial, aparecera a seguinte mensagem que ele esta sendo iniciado.

Figura - 11

 Ao concluir todo o processo clique no botão de sair e a qualquer momento poderar ser iniciado novamente no ícone do Windows.

Figura - 12

Finalizando a execução da aplicação no computador do cliente.

Verificaremos agora com fazer a instalação da aplicação.

     Baixe a aplicação no seguinte endereço abaixo.

http://vciga.dyndns.org/siga1/syspaf_download/Restart_GetCard_Install_Atualizado_em_25-10-2015.exe

     Pronto agora vamos inicia o processo de instalação, ao executar o arquivo baixado aparecera a seguinte tela de apresentação.

Figura - 13

Selecione "ok" e continue em "Avançar" como na tela abaixo.

Figura - 14

Selecione aceito a instalação da aplicação.

Figura - 15

Selecione em avançar para continuar a instalação da aplicação.

Figura - 16

Caso existir a pasta Tef-Dial o sistema perguntara se a instalação sera na pasta existente.

Figura - 17

Veja que será instalado no computador, clique em avançar.

Figura - 18

Mostrando o que a instalação vai alterar no computador.

Figura - 19

Instale o "DotNetFrameWork Setup 4.0" para que a aplicação seja executada no Windows e assim concluir a instalação.
Figura - 20

Pronto agora o seu computador estará pronto para executar a aplicação de Reiniciar o Tef_Dial e o serviço do OPENVPNSERVICE.

Alguns detalhes do código fonte da aplicação.

     Vou colocar o condigo completo no GitHub no endereço.:
https://github.com/Alexssandrolima/estudos


using System.ServiceProcess;
using System.Diagnostics;
using System.IO;
using RestartGetCardServicos.Properties;


public bool Automaticamente { get; set; }
public bool Ligadosim { get; set; }

readonly string _username = Environment.ExpandEnvironmentVariables("%USERNAME%");
readonly string _userdomain = Environment.ExpandEnvironmentVariables("%USERDOMAIN%");
readonly string _varSourcePath = Environment.CurrentDirectory + "\\";
readonly string _varMachineName = Environment.MachineName;


        private void buttonSair_Click(object sender, EventArgs e)
        {
            Settings.Default.Automatica = checkBoxAutomatica.Checked;
            Settings.Default.ReiniciarVpn = checkBoxReiniciarVpn.Checked;
            Settings.Default.LigarTefDial = checkBoxLigarTefDialReiniciar.Checked;
            Settings.Default.Save();

                    listBoxPrincipal.Items.Add("Desligando o sistema ... ");
                    if (MessageBox.Show(Resources.Desejasairdosistema, Resources.SaindodoSistema, MessageBoxButtons.YesNo, MessageBoxIcon.Question).Equals(DialogResult.Yes))
                    {
                        Checharboxautomaticoligadodesligado();
                        Application.Exit();
                    }
        }




        private void buttonCancelar_Click(object sender, EventArgs e)
        {

            Settings.Default.Automatica =  checkBoxAutomatica.Checked;
            Settings.Default.ReiniciarVpn = checkBoxReiniciarVpn.Checked;
            Settings.Default.LigarTefDial = checkBoxLigarTefDialReiniciar.Checked;
            Settings.Default.Save();
            Application.Restart();
        }



        private void FormPrincipal_Load(object sender, EventArgs e)
        {
            //MessageBox.Show("_varMachineName >> " + _varMachineName);

            listBoxPrincipal.Items.Add(" Bom dia! " + _username);
            listBoxPrincipal.Items.Add(" Pressione Reiniciar Serviço no " + _userdomain);
            listBoxPrincipal.Items.Add(" ou Selecione \" Reiniciar Automaticamento ao iniciar na proxima vez! \" ");
            listBoxPrincipal.Items.Add(" Executando em: " + _varSourcePath);
            if (Automaticamente == Settings.Default.Automatica)
            {
                Ligadosim = true;
                listBoxPrincipal.Items.Add("Automatico já esta ligado ... ");
                checkBoxAutomatica.Checked = Automaticamente;
                RestartartandoServicosExecutaveis();
            }
            if(Automaticamente = Settings.Default.ReiniciarVpn)
            {
                checkBoxReiniciarVpn.Checked = true;
            }
            else
            {
                checkBoxReiniciarVpn.Checked = false;
               
            }
            if(Automaticamente = Settings.Default.LigarTefDial)
            {
                checkBoxLigarTefDialReiniciar.Checked = true;
            }
            else
            {
                checkBoxLigarTefDialReiniciar.Checked = false;
            }
        }



        private void Checharboxautomaticoligadodesligado()
        {
            if (checkBoxAutomatica.Checked)
            {
                listBoxPrincipal.Items.Add("automatico ligado ... ");
                if (!Ligadosim)
                {
                    Ligadosim = true;
                    //MessageBox.Show(" configurando o check box " + ligadosim);
                }
            }
            else
            {
                Ligadosim = false;
                //MessageBox.Show(" desconfigurando o checkbox " + ligadosim);
            }

            Settings.Default.Automatica = Ligadosim;
            Settings.Default.Save();

        }



        private void buttonIniciarServiço_Click(object sender, EventArgs e)
        {
            RestartartandoServicosExecutaveis();
        }



        private void RestartartandoServicosExecutaveis()
        {
            Settings.Default.Automatica = checkBoxAutomatica.Checked;
            Settings.Default.ReiniciarVpn = checkBoxReiniciarVpn.Checked;
            Settings.Default.LigarTefDial = checkBoxLigarTefDialReiniciar.Checked;
            Settings.Default.Save();
            listBoxPrincipal.Items.Add("Iniciando ... ");
            Nomedoservicodowindows = Settings.Default.NomedoServicoWindows;
            Nomeextensaoservico = Path.GetFileNameWithoutExtension(Nomedoservicodowindows);
            Desligarexecutavel();
            if (Automaticamente = Settings.Default.ReiniciarVpn)
            {
                Desligandoservicodowindows();
                Ligandoservicodowindows();
            }
            if (Automaticamente = Settings.Default.LigarTefDial)
            {
                Ligandoexecutavel();
            }
        }



        private void Ligandoservicodowindows()
        {
            listBoxPrincipal.Items.Add("== Começando a ligar >>" + Nomedoservicodowindows + "==");
            StopService(Nomeextensaoservico, 100000);
            listBoxPrincipal.Items.Add("== Continuando a ligar>>" + Nomedoservicodowindows + "==");
        }



        private void StopService(string serviceName, int timeoutMilliseconds)
        {
            ServiceController service = new ServiceController(serviceName);
            try
            {
                TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
                service.MachineName = _varMachineName;
                listBoxPrincipal.Items.Add("== service.Start >>" + service.Status.ToString() + "==");
                service.Start();
                listBoxPrincipal.Items.Add("== service.Start >>" + service.Status.ToString() + "==");
                service.WaitForStatus(ServiceControllerStatus.Running, timeout);
                listBoxPrincipal.Items.Add("== service.Start >>" + service.Status.ToString() + "==");
                listBoxPrincipal.Items.Add("== service.Start >>" + service.Status.ToString() + "==");
            }
            catch (Exception ex)
            {
                listBoxPrincipal.Items.Add("Erro! >>" + ex.InnerException.Message + " >> " + ex.Message);
                MessageBox.Show(Resources.FormPrincipal_StopService_ErrorEncontrado + ex.InnerException.Message + ex.Message);
            }
        }



        public void StartService(string serviceName, int timeoutMilliseconds)
        {
            listBoxPrincipal.Items.Add("== Começando >>" + serviceName + " T:" + timeoutMilliseconds + "==");
            ServiceController service = new ServiceController(serviceName);
            try
            {
                TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
                service.MachineName = _varMachineName;
                listBoxPrincipal.Items.Add("== service.Stop >>" + service.Status.ToString() + "==");
                service.Stop();
                service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
                listBoxPrincipal.Items.Add("== service.Stop >>" + service.Status.ToString() + "==");
            }
            catch (Exception ex)
            {
                string nomemessagem = "Erro Encontrado no serviço. >>" + ex.InnerException.Message + " >> " + ex.Message;
                listBoxPrincipal.Items.Add(nomemessagem);
                MessageBox.Show(Resources.FormPrincipal_StopService_ErrorEncontrado + ex.InnerException.Message + ex.Message);
            }
        }



        private void Ligandoexecutavel()
        {
            listBoxPrincipal.Items.Add("== Ligando >> " + NomeLocalextensao + "==");
            if (NomeLocalextensao != string.Empty)
            {
                listBoxPrincipal.Items.Add("Entrando para Ligar o serviço >>" + NomeLocalextensao);
                try
                {
                    if(File.Exists(NomeLocalextensao))
                    {
                        ProcessStartInfo startInfo = new ProcessStartInfo(NomeLocalextensao);
                        startInfo.WorkingDirectory = NomeDiretorio;
                        listBoxPrincipal.Items.Add("Processando o arquivo " + startInfo.FileName);
                        Process.Start(startInfo);
                    }

               }
                catch (Exception erro)
                {
                    #if DEBUG
                    MessageBox.Show(erro.Message + "");
                    #else
                    listBoxPrincipal.Items.Add(erro.Message + " ");
                    #endif
                }
            }
        }


        private void Desligarexecutavel()
        {
            listBoxPrincipal.Items.Add("== Desligando >> " + NomeLocalextensao + "==");
            NomeLocalextensao = Settings.Default.NomeLocalextensao;
            Nomeextensao = Path.GetFileNameWithoutExtension(NomeLocalextensao);
            NomeDiretorio = Path.GetDirectoryName(NomeLocalextensao);
            if (Nomeextensao != string.Empty)
            {
                listBoxPrincipal.Items.Add("desligando o executável >>" + Nomeextensao);
                try
                {
                    var processes = Process.GetProcessesByName(Nomeextensao);
                    foreach (var process in processes)
                    {
                        listBoxPrincipal.Items.Add("Parando o executavel " + process.ProcessName);
                        process.Kill();
                    }
                }
                catch (Exception error)
                {
                    listBoxPrincipal.Items.Add("Erro ao Finalizar programas encontrar o arquivo " + error.Message);
                }
            }
        }


        private void labelConfiguracao_Click(object sender, EventArgs e)
        {
            listBoxPrincipal.Items.Add("== Configurando o Sistema ==");

            var configurar = new FormConfigurar();
            configurar.ShowDialog();
        }

        public string Nomedoservicodowindows { get; set; }
        public string NomeLocalextensao { get; set; }
        public string Nomeextensao { get; set; }
        public string NomeDiretorio { get; set; }
        public string Nomeextensaoservico { get; set; }


}

Configurando o sistema com o FormConfigurar

using System.IO;
using RestartGetCardServicos.Properties;

        public string Filefilter = "tef_dial.exe|*.exe";
        public string FileTitle = "Pegando o arquivo executavel do tefdial.exe";
        public string FileService = "OpenVPNService.exe";
       
        private OpenFileDialog _openFile;

        private void buttonProcurarArquivo_Click(object sender, EventArgs e)
        {
            _openFile = new OpenFileDialog
            {
                InitialDirectory = "C:\\TEF_DIAL\\",
                Filter = Filefilter,
                Title = FileTitle,
                FileName = @"tef_dial.exe"
            };
            _openFile.ShowDialog();

            if (_openFile.FileName != null)
            {
                textBoxNomeLocalextensao.Text = _openFile.FileName; // aqui você pega o local + nome do arquivo completo.
                textBoxNomedoServicoWindows.Text = FileService;
            }
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            Settings.Default.NomeLocalextensao = textBoxNomeLocalextensao.Text;
            Settings.Default.NomedoServicoWindows = textBoxNomedoServicoWindows.Text;
            Settings.Default.Save();
            Close();
        }

        private void FormConfigurar_Load(object sender, EventArgs e)
        {
            textBoxNomeLocalextensao.Text = Settings.Default.NomeLocalextensao;
            textBoxNomedoServicoWindows.Text = Settings.Default.NomedoServicoWindows;
        }






Nenhum comentário:

Postar um comentário