Usuário com melhor resposta
[RESOLVIDO] Identificar programa em execução via código C#

Pergunta
-
Bom dia...
Sou iniciante em programação, estou criando um projeto e encontrei uma duvida de como identificar um processo .exe que esta sendo executado no S.O Windows.
Para Ser mais especifico:
Gostaria de detectar esse processo (Arquivo.exe) e enviar comando (this.Close(); ao fechar o (Arquivo.exe) .
Abaixo segue codigo C# que fiz até o momento, e as linhas em negrito são aonde esta apresentando o ERRO.
using System;
using System.IO;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO.Compression;
using System.Threading;
namespace zipFile
{
public partial class Form1 : Form
{
//string para extrair arquivos
string ExtrairArquivosPara = @"C:\Windows\Temp\Meu_Arquivo";
string CaminhoZip = @"C:\Windows\Temp\Meu_Arquivo\Arquivo.zip";
public Form1()
{
InitializeComponent();//Deixar form Transparente
TransparencyKey = (BackColor);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
//Criar Pasta no S.O
DirectoryInfo raiz = new DirectoryInfo(@"C:\\Windows\\Temp");
raiz.CreateSubdirectory("Meu_Arquivo");
//Extrair arquivos da Pasta Resources
byte[] myfile = Properties.Resources.CClear;
File.WriteAllBytes("C:\\Windows\\Temp\\Meu_Arquivo\\Arquivo.zip", myfile);
//extrair arquivos
ZipFile.ExtractToDirectory(CaminhoZip, ExtrairArquivosPara);
//Executar arquivos
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = @"C:\\Windows\\Temp\\Meu_Arquivo\\Arquivo\\Arquivo.exe";
Process p = Process.Start(pInfo);this.Hide();
{
if (!p.HasExited) //aqui a intenção seria de quando o processo (Arquivo.exe) for encerrado, ele feche a Form1
this.Close();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//deletar pasta se ela existir
Directory.Delete(@"C:\\Windows\\Temp\\Meu_Arquivo", true);
Application.Exit();
System.Environment.Exit(0);
}
}
}
- Editado 1v4n Lop35 segunda-feira, 20 de março de 2017 14:33
Respostas
-
Olá Ivan,
Olhando o seu código, poderia ser assim (seguindo o que o Artur comentou também):
Após chamar o Process.Start(pInfo);
p.EnableRaisingEvents = true; p.Exited += new EventHandler(p_Exited);
E adicione o método abaixo no seu form:
void p_Exited(object sender, EventArgs e) { this.Close(); }
Fabio Rosa.
- Sugerido como Resposta Robson William SilvaModerator quarta-feira, 15 de março de 2017 19:22
- Marcado como Resposta Robson William SilvaModerator sexta-feira, 17 de março de 2017 12:28
Todas as Respostas
-
Olá!
Você pode identificar se um aplicativo / processo está rodando com o comando abaixo:
Process[] pname = Process.GetProcessesByName("Arquivo.exe"); if (pname.Length == 0) //Não está executando else //Está Executando
Para monitorar quando o processo é fechado, é preciso criar um delegate:
var p = pname[0]; p.Exited += new EventHandler(p_Exited); void p_Exited(object sender, EventArgs e) { //Processo terminado. Aqui você faz a sua ação. }
Att,
Fabio Rosa.
-
Olá, Ivan.
Utilize o retorno do Process.Start para criar um delegate, por exemplo:
...
Process p = Process.Start(pInfo); p.EnableRaisingEvents = true; p.Exited += P_Exited; private static void P_Exited(object sender, EventArgs e) { Environment.Exit(0); }
Para retornar o processo necessário, você pode usar o comando: Process.GetProcessById(p.Id) //Id (PID) do processo.
Att, Artur.
-
Bom dia Fábio
Desde já agradeço sua atenção...
Como mencionei anteriormente sou iniciante, e para mim infelizmente não ficou muito claro, de como posso adicionar o exemplo que você forneceu, no código que deixei na descrição.
Sendo Assim como ficaria seu exemplo no código descrito?
-
-
Olá Ivan,
Olhando o seu código, poderia ser assim (seguindo o que o Artur comentou também):
Após chamar o Process.Start(pInfo);
p.EnableRaisingEvents = true; p.Exited += new EventHandler(p_Exited);
E adicione o método abaixo no seu form:
void p_Exited(object sender, EventArgs e) { this.Close(); }
Fabio Rosa.
- Sugerido como Resposta Robson William SilvaModerator quarta-feira, 15 de março de 2017 19:22
- Marcado como Resposta Robson William SilvaModerator sexta-feira, 17 de março de 2017 12:28