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
                {
                }
            }
        }