segunda-feira, 11 de fevereiro de 2008

Iniciar e Parar serviços com .NET


Eu costumo dizer que fazer coisas com o .NET framework é igual ao neston. Existem
mil maneiras de fazer. Invente uma.


O que vou descrever é uma das várias maneira que a gente pode fazer para se gerenciar
serviços com o .NET. São várias as situações onde é necessário inicar ou parar um
serviço de acordo com a necessidade de uma aplicação. Seja para economizar recursos
do servidor ou seja para atender a determinada regra de fluxo. Então vamos lá: O
exemplo que irei dar, manipula o serviço do FireBird
SQL
.


Dentro de um diretório específico (normalmente o diretório da sua aplicação), crie
dois arquivos *.bat. Um para parar e outro para inicializar o seriviço.



No arquivo que pára o serviço, a linha de comando é



NET STOP "FireBird Server - DefaultInstance"



e o arquivo que starta o serviço:



NET START "FireBird Server - DefaultInstance"



Lembrando que você precisa conferir no painel de controle > ferramentas administrativas > serviços se o nome do serviço do firebird que vc instalou é mesmo
"FireBird Server - DefaultInstance".
Pode ser que o nome a instância não seja o nome
"default".



Se achar conveniente, teste os batches diretamente no prompt de comando para verificar
se eles estão corretos.



Com os batches prontos, podemos partir para a implementação do código.



Abaixo temos um exemplo de como fazer a chamada dos arquivos .bat via código .NET.



Basta adequá-lo a sua necessidade.


//Evite deixar esse valor hardcoded.
//Passe-o para um arquivo de configura‡Æo
//(app.settings, web.config, ou uma classe serializada)
const string STARTFILE = @"c:\firebirdstart.bat";
const string STOPFILE = @"c:\firebirdstop.bat";


private void btnIniciar_Click(object sender, EventArgs e)
{
int resultado = this.StartService();
MessageBox.Show(resultado.ToString());
}


private void btnParar_Click(object sender, EventArgs e)
{
int resultado = this.StopService();
MessageBox.Show(resultado.ToString());
}


int StartService()
{
return this.ManageFirebirdService(STARTFILE);
}


int StopService()
{
return ManageFirebirdService(STOPFILE);
}


int ManageFirebirdService(string pBatchFile)
{
Process proc = Process.Start(this.GetProcess(pBatchFile));
if (proc.HasExited)
return proc.ExitCode;
else
return 0;
}


ProcessStartInfo GetProcess(string pFile)
{
ProcessStartInfo psi = new ProcessStartInfo(pFile);
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
return psi;
}


É isso ai!




Nenhum comentário: