[英]Win32Exception while in Adminstrator mode
Im getting this error while Visual Studio is in Administrator mode当 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
Im just trying to show total time run of a process.我只是想显示一个进程的总运行时间。 Here is the main code这是主要代码
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();
}
}
}
Thanks谢谢
Certain processes require escalated privileges in order to access certain information (Like StartTime).某些进程需要升级权限才能访问某些信息(如 StartTime)。 You can always use a try/catch loop, to skip the processes you can't access:您始终可以使用 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();
}
}
}
You can add a manifest file in your solution.您可以在解决方案中添加清单文件。 Change this line to make the application acquire admin privileges:更改此行以使应用程序获得管理员权限:
<requestedExecutionLevel level="requireAdministrator"
uiAccess="false" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.