Arquivo
Instrumentação .NET – Processos
Fala galera. Neste artigo vou demonstrar como desenvolver a maioria das funções que você encontra no gerenciador de tarefas do Windows. Segue abaixo um print do TaskManager do Windows que você pode acessar digitando “taskmgr” no executar do menu iniciar. (Se você identificar algum vírus na minha lista de processos me avise..rs).
Dentro no namespace System.Diagnostics você tem a classe Process que permite você executar um novo processo, monitorar algum existente, fechar um processo e outras coisas mais. Segue abaixo um exemplo de como executar um novo processo.
- Process.Start("Calc");
- Process.Start("Notepad", @"c:\Teste.txt");
No exemplo acima eu primeiro iniciei uma instancia da calculadora do Windows. Na segunda linha eu estou iniciando uma instancia do notepad do Windows passando como parâmetro o arquivo “C:\Teste.txt” para ser aberto pelo notepad.
Outra forma de iniciar um processo é utilizando a classe ProcessStartInfo que é utilizada quando você precisa realizar mais configurações para iniciar um processo ou quando você precisa criar essas configurações de modo dinâmico ou em etapas diferentes. Segue abaixo um exemplo.
- ProcessStartInfo psi = new ProcessStartInfo();
- psi.Arguments = @"c:\windows\win.ini";
- psi.FileName = "Notepad";
- Process.Start(psi);
O ProcessStarInfo tem várias propriedades que permitem você tratar a inicialização do seu processo. Abaixo eu demonstro algumas propriedades para você configurar sobre qual domínio sua propriedade ser inicializada.
- psi.Domain = "Dominio.com";
- psi.UserName = "Francisco";
A classe Process contém um método estático que retorna todos os processos que estão executando no computador atualmente. Para utiliza-lo chame o método GetProcesses como demonstrado no exemplo abaixo.
- foreach (Process p in Process.GetProcesses())
- {
- Console.WriteLine(p.Id); //Id do Processo
- Console.WriteLine(p.ProcessName); //Nome do Processo
- Console.WriteLine(p.MainModule); //Módulo principal da execução
- Console.WriteLine(p.Responding); //Verifica se a aplicação esta respondendo
- Console.WriteLine(p.TotalProcessorTime); //Tempo de processamento
- Console.WriteLine(p.VirtualMemorySize64); //Total de memória virtual
- }
Além monitorar os processos você ainda tem a opção de gerencia-los. Segue abaixo alguns exemplos.
- Process p = Process.Start("Notepad", @"c:\Teste.txt");
- p.CloseMainWindow();
- p.Kill();
- p.Start();
- p.WaitForExit();
Na linha 2 eu estou dizendo para que o notepad feche naturalmente, isto quer dizer que o notepad irá executar seu comportamento padrão de execução exibindo aquela tela para salvar as alterações. Na terceira linha estou matando o processo, funciona da mesma forma que o “Finalizar processo” do gerenciador de tarefas. Na quarta linha estou iniciando o processo novamente e na ultima linha eu digo para o nosso processo esperar que o notepad feche para continuarmos a execução.
A classe processo nos permite retornar todos os módulos associados ao processo utilizando o método modules. Segue o exemplo demonstrando como utilizar.
- foreach (ProcessModule pm in p.Modules)
- {
- Console.WriteLine(pm.FileName); //Arquivo do Módulo
- Console.WriteLine(pm.ModuleMemorySize); //Memória utilizada
- Console.WriteLine(pm.ModuleName); //Nome do Módulo
- Console.WriteLine(pm.FileVersionInfo.ToString()); //Informação sobre a versão
- }
Espero que tenham gostado e até o próximo artigo.