【问题标题】:C# Process Termination notificationsC# 进程终止通知
【发布时间】:2015-06-11 10:07:07
【问题描述】:

我目前正在寻找一种在特定进程关闭时删除特定文件的方法。我找到了很多创建进程和为exited 添加事件处理程序的示例,但我需要收到系统中任何进程的通知,而不仅仅是我创建的那些。

任何人都可以阐明如何实现这一点吗?

【问题讨论】:

  • 构建所有正在运行的进程的列表,定期更新,比较差异。这将错过在间隔之间潜入的短期程序,但我不知道该怎么做。
  • 如果您对特定进程感兴趣,请使用Process.GetProcessesByName()。然后按照 Ruskin 在下面的示例中演示的那样将它们连接起来......

标签: c# events process exit terminate


【解决方案1】:

我对你的问题很感兴趣,所以我为它写了一个小应用程序,希望你觉得它有用。可以通过很多方式改进:)

class Program
{
    private static readonly List<Process> AllProcesses = new List<Process>();

    static void Main(string[] args)
    {
        var timer = new Timer(1000);
        timer.AutoReset = true;
        timer.Elapsed += (sender, eventArgs) =>
        {
            Process[] processSnapShot = Process.GetProcesses();
            var newProcesses = processSnapShot.Where(p => !AllProcesses.Select(p2 => p2.Id).Contains(p.Id));

            WireHandler(newProcesses);

            AllProcesses.AddRange(newProcesses);
        };

        var processes = Process.GetProcesses();
        WireHandler(processes);

        timer.Start();
        Console.ReadLine();
    }

    private static void WireHandler(IEnumerable<Process> processes)
    {
        foreach (var process in processes)
        {
            try
            {
                Console.WriteLine("Process started " + process.ProcessName);
                process.EnableRaisingEvents = true;
                process.Exited += ProcessOnExited;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error occurred " + e.Message);
            }
        }
    }

    private static void ProcessOnExited(object sender, EventArgs eventArgs)
    {
        var process = (Process) sender;
        AllProcesses.Remove(process);

        Console.WriteLine("Process exited " + process.ProcessName);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多