C#是否可以关闭该进程

本文关键字:进程 是否 | 更新日期: 2023-09-27 18:00:59

我有这个代码:

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

C#是否可以关闭该进程

工作正常,但当启动samp.exe时,名称会更改为gta_sa.exe。

听起来samp.exe是gta_sa.exe的启动器。也就是说,第一个进程启动第二个进程。如果samp.exe没有等待gta_sa.exe退出,则必须找到gta_sa.exe的运行实例。然后,您可以从运行的进程中创建一个进程实例,并为Exited添加一个事件处理程序。

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启动的一个进程。

当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();
}