Ejemplo n.º 1
0
        public Task <ChangingProcessPropertiesDto> GetInfo()
        {
            if (!_isWatching)
            {
                throw new InvalidOperationException("The watcher must first be initialized using WatchProcess()");
            }

            _process.Refresh();

            var result = new ChangingProcessPropertiesDto();

            using (var results = _searcher.Get())
            {
                var wmiProcess = results.Cast <ManagementObject>().SingleOrDefault();
                if (wmiProcess == null || _process.HasExited)
                {
                    result.Status = ProcessStatus.Exited;
                }
                else
                {
                    result.ApplyProperties(_process, wmiProcess);
                }
            }

            return(Task.FromResult(result));
        }
        public static void ApplyProperties(this ChangingProcessPropertiesDto dto, Process process, ManagementObject wmiProcess)
        {
            if (process.HasExited)
            {
                dto.Status = ProcessStatus.Exited;
                return;
            }

            try
            {
                dto.PrivateBytes   = process.PrivateMemorySize64;
                dto.WorkingSetSize = process.WorkingSet64;
            }
            catch (Exception)
            {
                // ignored
            }

            dto.HandleCount        = process.HandleCount;
            dto.TotalProcessorTime = process.TotalProcessorTime;
            dto.UserProcessorTime  = process.UserProcessorTime;
            dto.Status             = process.Responding ? ProcessStatus.Running : ProcessStatus.NotResponding;

            if (wmiProcess.TryGetProperty("KernelModeTime", out ulong kernelModeTime))
            {
                dto.KernelModeTime = TimeSpan.FromTicks((long)kernelModeTime);
            }

            if (wmiProcess.TryGetProperty("UserModeTime", out ulong userModeTime))
            {
                dto.UserModeTime = TimeSpan.FromTicks((long)userModeTime);
            }

            if (wmiProcess.TryGetProperty("Priority", out uint priority))
            {
                dto.Priority = priority;
            }

            if (wmiProcess.TryGetProperty("PageFaults", out uint pageFaults))
            {
                dto.PageFaults = pageFaults;
            }

            if (wmiProcess.TryGetProperty("OtherOperationCount", out ulong otherOperationCount))
            {
                dto.OtherOperationCount = otherOperationCount;
            }

            if (wmiProcess.TryGetProperty("OtherTransferCount", out ulong otherTransferCount))
            {
                dto.OtherTransferCount = otherTransferCount;
            }

            if (wmiProcess.TryGetProperty("PeakPageFileUsage", out uint peakPageFileUsage))
            {
                dto.PeakPageFileUsage = peakPageFileUsage;
            }

            if (wmiProcess.TryGetProperty("PeakVirtualSize", out ulong peakVirtualSize))
            {
                dto.PeakVirtualSize = peakVirtualSize;
            }

            if (wmiProcess.TryGetProperty("PeakWorkingSetSize", out ulong peakWorkingSetSize))
            {
                dto.PeakWorkingSetSize = peakWorkingSetSize;
            }

            if (wmiProcess.TryGetProperty("PrivatePageCount", out ulong privatePageCount))
            {
                dto.PrivatePageCount = privatePageCount;
            }

            if (wmiProcess.TryGetProperty("PageFileUsage", out uint pageFileUsage))
            {
                dto.PageFileUsage = pageFileUsage;
            }

            if (wmiProcess.TryGetProperty("QuotaNonPagedPoolUsage", out uint quotaNonPagedPoolUsage))
            {
                dto.QuotaNonPagedPoolUsage = quotaNonPagedPoolUsage;
            }

            if (wmiProcess.TryGetProperty("QuotaPagedPoolUsage", out uint quotaPagedPoolUsage))
            {
                dto.QuotaPagedPoolUsage = quotaPagedPoolUsage;
            }

            if (wmiProcess.TryGetProperty("QuotaPeakNonPagedPoolUsage", out uint quotaPeakNonPagedPoolUsage))
            {
                dto.QuotaPeakNonPagedPoolUsage = quotaPeakNonPagedPoolUsage;
            }

            if (wmiProcess.TryGetProperty("QuotaPeakPagedPoolUsage", out uint quotaPeakPagedPoolUsage))
            {
                dto.QuotaPeakPagedPoolUsage = quotaPeakPagedPoolUsage;
            }

            if (wmiProcess.TryGetProperty("ReadOperationCount", out ulong readOperationCount))
            {
                dto.ReadOperationCount = readOperationCount;
            }

            if (wmiProcess.TryGetProperty("ReadTransferCount", out ulong readTransferCount))
            {
                dto.ReadTransferCount = readTransferCount;
            }

            if (wmiProcess.TryGetProperty("ThreadCount", out uint threadCount))
            {
                dto.ThreadCount = threadCount;
            }

            if (wmiProcess.TryGetProperty("VirtualSize", out ulong virtualSize))
            {
                dto.VirtualSize = virtualSize;
            }

            if (wmiProcess.TryGetProperty("WriteOperationCount", out ulong writeOperationCount))
            {
                dto.WriteOperationCount = writeOperationCount;
            }

            if (wmiProcess.TryGetProperty("WriteTransferCount", out ulong writeTransferCount))
            {
                dto.WriteTransferCount = writeTransferCount;
            }
        }