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;
}