2015-07-04 79 views
0

我有这样的代码:C#是否可以关闭该进程?

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进程是否已关闭,然后关闭我的应用程序。

SHORTLY:我想制作一个按钮。当我点击,它启动samp.exe过程,但samp.exe重命名为gta_sa.exe,所以我需要检查,如果gta_sa.exe过程中被关闭,关闭我的应用程序(将Test.exe)

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

回答

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并为Exited添加事件处理程序。

P.S我的代码关闭samp.exe,但我wan't关闭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启动的一个进程。

+0

是的,但我是新手,能有人为我创造的代码? :(( – Dewagg

+1

)你所需要的一切或多或少都在我链接到的MSDN例子中,看看这个例子,并尽力编写代码。如果你不愿意写代码,可以发布一个新问题你的代码尝试 –

+0

我知道进程杀(),但我需要其他...我问如何关闭当前的form.exe当gta_sa.exe关闭 – Dewagg

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