我有这段代码:
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
。
答案 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();
}