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:
Postar um comentário