我对C#很新,所以我的问题可能听起来很荒谬。我正在开发一个有时需要运行ffmpeg的应用程序。正如您所猜测的,当主机应用程序关闭时,必须终止此ffmpeg进程。我使用这样的代码来完成这项任务:
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
private void OnProcessExit(object sender, EventArgs e)
{
proc.Kill();
}
当应用程序正确关闭时(通过它的界面或使用Taskman - 应用程序),这样可以正常工作。问题是OnProcessExit事件不会触发,如果程序的进程被杀死(使用Taskman - Processes)。据我所知,杀戮过程和关闭程序操作在低级别上并不相同,但我想,杀戮过程是一个命令,它可以用C#工具处理。那么,在这种情况下关闭子进程是否可能?
答案 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);
}
}
}