C#是否可以关闭该流程?

时间:2015-07-04 16:23:16

标签: c# process

我有这段代码:

private void button1_Click(object sender, EventArgs e)
{
    Process p = new Process();
    string path = AppDomain.CurrentDomain.BaseDirectory + "samp.exe";
    string arguments = "arguments...";
    p.Exited += new EventHandler(p_Exited);
    p.StartInfo.FileName = path;
    p.EnableRaisingEvents = true;
    p.Start();
}

void p_Exited(object sender, EventArgs e)
{
    MessageBox.Show("it works");
}

可行,但当我启动samp.exe时,名称会更改为gta_sa.exe。我想检查gta_sa.exe进程是否已关闭,然后关闭我的应用。

简短:我想制作一个按钮。当我点击时,它会启动samp.exe进程,但samp.exe会重命名为gta_sa.exe,因此我需要检查gta_sa.exe进程是否已关闭,关闭我的应用(Test.exe) )

我的代码正在关闭samp.exe,但我想关闭gta_sa.exe

2 个答案:

答案 0 :(得分:3)

  

它可以工作,但是当启动samp.exe时,将名称更改为gta_sa.exe。

听起来像samp.exe是gta_sa.exe的启动器。也就是说,第一个过程开始第二个过程。如果samp.exe没有等待gta_sa.exe退出,则必须找到正在运行的gta_sa.exe实例。然后,您可以create a Process instance from the running process并为已退出。

添加事件处理程序
  

P.S我的代码关闭了samp.exe,但我不想关闭gta_sa.exe ..

不,不是。当samp.exe自行关闭时(或出于其他原因),您的代码会收到警报。如果samp.exe确实是一个启动器,它的正常行为是在启动gta_sa.exe后关闭。

如果要关闭gta_sa.exe,可以使用Process.Kill()

执行此操作

您可以像这样

设置gta_sa.exe关闭的事件处理程序
var processes = Process.GetProcessesByName("gta_sa.exe");
foreach (var p in processes)
{
    p.EnableRaisingEvents = true;
    p.Exited += new EventHandler(p_Exited);
}

确保等到gta_sa.exe启动后再运行此代码。通常,进程中只有一个项目,一个是由samp.exe启动的进程。

答案 1 :(得分:0)

当你的samp.exe进程退出时,尝试获取“gta_sa.exe”进程并终止它:

void p_Exited(object sender, EventArgs e)
{
    var processes = Process.GetProcessesByName("gta_sa.exe");
    foreach (var process in processes)
        process.Kill();
}
相关问题