Win32Exception в режиме администратора - PullRequest
0 голосов
/ 28 сентября 2019

Я получаю эту ошибку, когда Visual Studio находится в режиме администратора

System.ComponentModel.Win32Exception
  HResult=0x80004005
  Message=Access is denied
  Source=System
  StackTrace:
   at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
   at System.Diagnostics.Process.GetProcessTimes()
   at System.Diagnostics.Process.get_StartTime()
   at TaskManager.Program.Main(String[] args) in C:\Users\User\source\repos\TaskManager\TaskManager\Program.cs:line 18

Я просто пытаюсь показать общее время выполнения процесса.Вот основной код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace TaskManager
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processList = Process.GetProcesses();
            foreach(Process process in processList)
            {
                DateTime localDate = DateTime.Now;
                Console.WriteLine(@" {0} | ID: {1} | Status {2} | Memory {3} MB | Total Run Time {4}", process.ProcessName, process.Id, process.Responding, process.PrivateMemorySize64 / 1000000, localDate - process.StartTime);
            }
            Console.ReadLine();
        }
    }
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Вы можете добавить файл манифеста в ваше решение.Измените эту строку, чтобы приложение получало права администратора:

<requestedExecutionLevel level="requireAdministrator" 
    uiAccess="false" />
0 голосов
/ 28 сентября 2019

Некоторым процессам требуются повышенные привилегии для доступа к определенной информации (например, StartTime).Вы всегда можете использовать цикл try / catch, чтобы пропустить процессы, к которым у вас нет доступа:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace TaskManager
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processList = Process.GetProcesses();
            foreach(Process process in processList)
            {
                try
                {
                    DateTime localDate = DateTime.Now;
                    Console.WriteLine(@" {0} | ID: {1} | Status {2} | Memory {3} MB | Total Run Time {4}", process.ProcessName, process.Id, process.Responding, process.PrivateMemorySize64 / 1000000, localDate - process.StartTime);
                }
                catch (Win32Exception ex)
                {
                    Console.WriteLine(@"Unable to access process '{0}': {1}", process.Id, ex.Message);
                }
            }
            Console.ReadLine();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...