Отслеживаю процессы и сохраняю данные о ней в json. Сейчас проблема в том что если открыть программу №1, потом открыть №2 и закрыть эти программы то сохранится программа №2(последняя запущенная). Как сделать так что бы две программы сохранились?
using System;
using System.Management;
namespace ProjectX_V._2
{
class Program
{
public static SaveInfo saveInfo = new SaveInfo();
public static ProgrammInfo info = new ProgrammInfo();
public static string[] arrayProgramm = { "Calculator.exe", "Illustrator.exe", "Photoshop.exe", "notepad.exe", "HxCalendarAppImm.exe", "mspaint.exe","Telegram.exe" };
public static string id, nameStarted;
public static void Main(string[] args)
{
ManagementEventWatcher startProgramm = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
startProgramm.EventArrived += StartProcesses;
startProgramm.Start();
ManagementEventWatcher stopProgramm = new ManagementEventWatcher(
new WqlEventQuery("SELECT * FROM Win32_ProcessStopTrace"));
stopProgramm.EventArrived += StopProcesses;
stopProgramm.Start();
Console.WriteLine(" Press ENTER to exit and save");
Console.ReadLine();
saveInfo.StopAndSave();
startProgramm.Stop();
stopProgramm.Stop();
}
static void StartProcesses(object programm, EventArrivedEventArgs e)
{
string name = e.NewEvent.Properties["ProcessName"].Value.ToString();
if (Array.Exists(arrayProgramm, element => element == name) && name != nameStarted)
{
id = e.NewEvent.Properties["ProcessId"].Value.ToString();
DateTime time = DateTime.Now;
Console.WriteLine("start");
saveInfo.Start();
nameStarted = e.NewEvent.Properties["ProcessName"].Value.ToString();
}
}
static void StopProcesses(object programm, EventArrivedEventArgs e)
{
if (e.NewEvent.Properties["ProcessId"].Value.ToString().Equals(id))
{
nameStarted = "";
Console.WriteLine("stop");
saveInfo.Stop(e);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Management;
namespace ProjectX_V._2
{
class SaveInfo
{
Stopwatch stopwatch = new Stopwatch();
public static List list = new List();
public static string timeStart;
public void Start()
{
stopwatch.Start();
DateTime time = DateTime.Now;
timeStart = time.ToLongTimeString();
}
public void Stop(EventArrivedEventArgs e)
{
DateTime time = DateTime.Now;
stopwatch.Stop();
TimeSpan ts = stopwatch.Elapsed;
stopwatch.Reset();
list.Add(new ProgrammInfo()
{
Id = e.NewEvent.Properties["ProcessId"].Value.ToString(),
NameStart = e.NewEvent.Properties["ProcessName"].Value.ToString(),
TimeStart = timeStart,
TimeStop = time.ToLongTimeString(),
LongTime = ts.ToString()
});
Console.WriteLine($"{e.NewEvent.Properties["ProcessName"].Value.ToString()} - data is saved");
}
public async void StopAndSave()
{
Serialization finish = new Serialization();
await finish.SerializeAsync(list);
}
}
}