如何在c#上退出exe进程?

时间:2014-07-24 17:22:42

标签: c# process

如何在Application Exit或Exit按钮上退出此场景的进程。

namespace test2
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }

        private void Startbutton_Click(object sender, EventArgs e)
        {

            ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg.exe");
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = "-i " + urltext.Text.Trim() + "?fifo_size=1000000 -map 0:p:" + Channeltext.Text.Trim() + " -vcodec copy -acodec copy -f segment -segment_time " + splittimetext.Text.Trim() + " " + filenametext.Text.Trim() + "-%03d.ts";
        System.Diagnostics.Process.Start(startInfo);
        }
}

如何在Application Exit上退出此场景的进程。

4 个答案:

答案 0 :(得分:5)

将流程实例保存到变量,然后订阅ProcessExit,当事件被触发时,终止该流程。

var process = System.Diagnostics.Process.Start(startInfo);
AppDomain.CurrentDomain.ProcessExit += (a,b) => process.Kill();

答案 1 :(得分:1)

作为班级成员继续引用您的流程。

Process myProcess;

在启动流程的方法中

myProcess = new Process(startInfo);
myProcess.Start();

最后,订阅表单完成/结束时发生的事件,并通过调用myProcess.Kill();来终止进程

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    try { myProcess.Kill(); }
    catch { ... }
}

答案 2 :(得分:0)

您最终可能会使用以下代码终止该进程:

try {
    foreach(System.Diagnostics.Process myProc in System.Diagnostics.
        Process.GetProcesses())
          if (myProc.ProcessName == "process name")
            myProc.Kill();
   } catch(Exception ex) {} 

将其置于OnExit()方法下并覆盖。

答案 3 :(得分:0)

子进程应该自动关闭,但如果它让你的主应用程序关闭,那么将它们存储在公共列表中以便以后关闭。

public partial class MainForm : Form        
{
    List<Process> myProcesses = new List<Process>();
    public MainForm()
    {
        InitializeComponent();
    }

    private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        foreach (System.Diagnostics.Process myProcess in myProcesses)
        {
            myProcess.Close();
        }
    }

    private void MainForm_Load(object sender, EventArgs e)
    {

    }

    private void Startbutton_Click(object sender, EventArgs e)
    {    
        ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg.exe");
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.Arguments = "-i " + urltext.Text.Trim() + "?fifo_size=1000000 -map 0:p:" + Channeltext.Text.Trim() + " -vcodec copy -acodec copy -f segment -segment_time " + splittimetext.Text.Trim() + " " + filenametext.Text.Trim() + "-%03d.ts";
        myProcesses.add(System.Diagnostics.Process.Start(startInfo));
    }
}

此示例使用您计划拥有多个列表的列表。