diff --git a/Lib.ProcessManaging/ProcessManager.cs b/Lib.ProcessManaging/ProcessManager.cs index 750f71f..78b8812 100644 --- a/Lib.ProcessManaging/ProcessManager.cs +++ b/Lib.ProcessManaging/ProcessManager.cs @@ -52,21 +52,24 @@ namespace Lib.ProcessManaging while (!_cancellationTokenSource.IsCancellationRequested) { - foreach (var process in Process.GetProcesses()) + IEnumerable processes = Process.GetProcesses(); + foreach (var process in processes) { if (Processes.Any(p => p.EqualsProcess(process))) continue; IObservedProcess observedProcess = _observedProcessFactory.Create(process); + if (string.IsNullOrEmpty(observedProcess.FileName)) + continue; + Processes.Add(observedProcess); ProcessStarted?.Invoke(this, observedProcess); } - foreach (var observedProcess in Processes.ToList().Where(p => !Process.GetProcesses().Any(p.EqualsProcess))) + foreach (var observedProcess in Processes.ToList().Where(p => !processes.Any(p.EqualsProcess))) { Processes.Remove(observedProcess); - ProcessExited?.Invoke(this, observedProcess); //TestMe: is the passed process still usable? (disposed directly afterwards) - observedProcess.Dispose(); + ProcessExited?.Invoke(this, observedProcess); } Thread.Sleep(1000); @@ -78,7 +81,7 @@ namespace Lib.ProcessManaging public void Dispose() { - Processes.ForEach(p => p.Dispose()); + Processes.Clear(); _cancellationTokenSource.Cancel(); _cancellationTokenSource.Dispose();