C#:关闭应用程序进程的杀戮过程(使用taskman)

时间:2013-04-15 13:25:10

标签: c# windows process

我对C#很新,所以我的问题可能听起来很荒谬。我正在开发一个有时需要运行ffmpeg的应用程序。正如您所猜测的,当主机应用程序关闭时,必须终止此ffmpeg进程。我使用这样的代码来完成这项任务:

AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
private void OnProcessExit(object sender, EventArgs e)
   {
      proc.Kill();
   }

当应用程序正确关闭时(通过它的界面或使用Taskman - 应用程序),这样可以正常工作。问题是OnProcessExit事件不会触发,如果程序的进程被杀死(使用Taskman - Processes)。据我所知,杀戮过程和关闭程序操作在低级别上并不相同,但我想,杀戮过程是一个命令,它可以用C#工具处理。那么,在这种情况下关闭子进程是否可能?

3 个答案:

答案 0 :(得分:1)

我认为试试这个

Application.Exit();

答案 1 :(得分:0)

我建议使用工作对象(根据Scott Miller的建议)。 另一个选项可以是您的应用程序的特殊帮助应用程序,它具有以下功能:

  • 启动您的应用
  • 当您的应用崩溃时,请在之后进行清理。

但是工作对象肯定是更好的选择,它专门针对这个

答案 2 :(得分:0)

让您的主机程序提交其程序ID作为参数, 然后听一下程序是否退出。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length != 0)
                new System.Threading.Thread( new System.Threading.ParameterizedThreadStart(handelexit)).Start(args[0]);

            // your code here
        }

        static void handelexit(object data)
        {
            int id = System.Convert.ToInt32(data.ToString());

            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id);
            while (!p.HasExited)
                System.Threading.Thread.Sleep(100);

            System.Environment.Exit(0);
        }
    }
}