private void UpdateRunningProcesses() { var processes = Process.GetProcesses(); HashSet<ProcessRecord> livingRecords = new HashSet<ProcessRecord>(); foreach (var currentProcess in processes) { int processId; { int? id = GetProcessId(currentProcess); if (id == null) continue; processId = id.Value; } ProcessRecord record; if (!_records.TryGetValue(processId, out record)) _records.Add(processId, record = new ProcessRecord(processId, currentProcess.StartTime)); else livingRecords.Add(record); UpdateProcessFileHandles(record); } if (livingRecords.Count != _records.Count) UpdateDeadRecords(livingRecords); }
private void UpdateProcessFileHandles(ProcessRecord record) { IEnumerator<FileSystemInfo> openFilesEnumerator = DetectOpenFiles.GetOpenFilesEnumerator(record.ProcessId); while (openFilesEnumerator.MoveNext()) { try { var fileSystemInfo = openFilesEnumerator.Current; record.AddFilepath(fileSystemInfo.FullName); } // ReSharper disable once EmptyGeneralCatchClause catch { } } }