Como eu não uso mais essa ferramenta que eu desenvolvi, decidi compartilhá-la :P
Antes de mais nada, vou explicar para que eu usava a ferramenta.
Resumo:
Eu testo minhas customizações em servidores remotos, por isso, eu preciso de uma maneira simples e rápida de finalizar/executar um aplicativo remotamente.
Então minha rotina era:
- Programava
- Compilava
- Parava o aplicativo (no remoto)
- Upava o aplicativo por ftp (curl)
- Iniciava o aplicativo (no remoto)
- Fazia os testes e recomeçava o ciclo se necessário
Não preciso nem dizer como essa ferramenta facilitava minha vida.
Para enviar o arquivo por ftp o processo não podia estar em uso, caso contrário o arquivo não poderia ser substituído, então configurando os eventos (pre-build e post-build) do Visual Studio eu conseguia automatizar todo aquele processo com uma simples tecla.
Configuração:
O cliente deve ser configurado no arquivo UDPClient.exe.config.
ip e port - endereço IP para o qual será enviado os pedidos.
passkey - uma string aleatória qualquer para ajudar a evitar o uso de terceiros.
O servidor deve ser configurado no arquivo UDPServer.exe.config.
ip e port - endereço IP em que o servidor vai escutar.
passkey - uma string aleatória qualquer para ajudar a evitar o uso de terceiros.
apps - array contendo todos os "perfis" dos aplicativos que serão gerenciados.
Sintaxe:
Código:
<string>name|C:\full\path\application.exe|command line|C:\working\dir</string>
Então 3 exemplos para ilustrar:
Código:
<string>calculadora|C:\Windows\System32\calc.exe</string>
<string>paint|C:\Windows\System32\mspaint.exe||C:\Windows\System32\</string>
<string>notepad|C:\Windows\System32\notepad.exe|arquivo_de_texto.txt|C:\Users\Administrator\Desktop\</string>
Com isso é possível usar os seguintes comandos no cliente:
Código:
UDPClient.exe start calculadora
Isso irá executar o perfil "calculadora", no caso, abrirá o calc.exe.
Código:
UDPClient.exe stop paint
Isso irá finalizar todos os processos do perfil "paint" (mspaint.exe).
O processo é finalizado por nome, não mantenho referência dos PID. Nada impede de você mudar isso no source.
Código:
UDPClient.exe restart notepad
Isso irá finalizar os processos notepad.exe que estão abertos e logo em seguida executará novamente o aplicativo.
Como dessa vez foi especificado um parâmetro para o aplicativo, ele vai abrir o arquivo txt localizado no desktop (C:\Users\Administrator\Desktop\arquivo_de_texto.t xt) (path relativo ao working_dir)
PS: O valor do passkey deve ser igual no cliente e servidor (obviamente).
Código fonte:
Vou dar uma resumida básica em como funciona:
- A ferramenta está divida em dois aplicativos (cliente e servidor).
- O cliente é quem faz as requisições (start/stop/restart).
- O servidor é responsável por gerenciar o estado das aplicações.
- A comunicação é feita através de uma porta UDP (configurável).
O código foi escrito em C# e está configurado para o VS 2013/.NET 4.5.
Não me recordo, mas acredito que não cheguei a usar nenhum recurso específico de versões mais novas do .NET, então se necessário, deve ser fácil dar um downgrade na dependência da versão do .NET.
Tanto que quando o aplicativo foi escrito (em 2011) e não existia VS 2013, então provavelmente foi criado com o VS 2010 e acabei atualizando o projeto depois para o VS 2013 (em 2014).
O tratamento de erros também é bem básico, portanto configurem corretamente, caso contrário o aplicativo irá travar.
Observação:
Eu sei que existem outras maneiras de conseguir os mesmos resultados, mas eu queria controle sobre isso.
Então, nada melhor do que desenvolver sua própria solução para as suas necessidades.
A idéia usada aqui serve para "qualquer coisa", então se alguém quiser mover o tópico depois, fique a vontade.
Não me responsabilizo por nada, não sei de nada, mas se quiser me pagar um café ou uma pizza eu aceito (hahah).
Enfim, estou anexando o source e os binários, usem e façam o que quiserem :P
[]'s