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
。
工作正常,但当启动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();
}