gpt4 book ai didi

c# - .NET Process.GetProcesses() "Access is denied."

转载 作者:行者123 更新时间:2023-12-03 11:12:58 29 4
gpt4 key购买 nike

我正在尝试使用以下代码获取当前机器上运行的进程列表:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
using System.ComponentModel;

namespace Xynfo.Classes
{
class Processes
{
//Gets list of processes running on local machine
public static Process[] ProcessList = Process.GetProcesses(Environment.MachineName);

//Creates the data table that will hold the process data
public static DataTable ProcessTable = new DataTable();


public DataTable GetProcessesInfo()
{

//Create DataTable Columns

ProcessTable.Columns.Add("Name", typeof(string));
ProcessTable.Columns.Add("Start Time", typeof(DateTime));
ProcessTable.Columns.Add("CPU %", typeof(TimeSpan));
ProcessTable.Columns.Add("Threads", typeof(string));
ProcessTable.Columns.Add("Session ID", typeof(int));
ProcessTable.Columns.Add("Unique ID", typeof(int));
ProcessTable.Columns.Add("RAM", typeof(float));
ProcessTable.Columns.Add("Machine", typeof(string));
ProcessTable.Columns.Add("Priority", typeof(int));




foreach (Process Process in ProcessList)
{
string pName = Process.ProcessName;
DateTime pStartTime = Process.StartTime;
TimeSpan pProcTime = Process.TotalProcessorTime;
string pThreads = Process.Threads.ToString();
int pSessionId = Process.SessionId;
int pId = Process.Id;
long pRam = Process.VirtualMemorySize64;
string pMachineName = Process.MachineName;
int pPriority = Process.BasePriority;



ProcessTable.Rows.Add(Process.ProcessName
,Process.StartTime
,Process.TotalProcessorTime
,Process.Threads
,Process.SessionId
,Process.Id
,Process.VirtualMemorySize64
,Process.MachineName
,Process.BasePriority);
}

return ProcessTable;

}
}
}

我收到以下错误:

System.ComponentModel.Win32Exception {"Access is denied."}

enter image description here

我是否需要在代码中提升某种特权?如果是这样,我该怎么做?

最佳答案

试着找出它是哪个进程。也许这是您不需要的系统进程。当然要看你的需要了。您还可以尝试以提升的权限运行您的应用程序(右键单击 exe->以管理员身份运行)

foreach (Process Process in ProcessList)
{
try
{
string pName = Process.ProcessName;
DateTime pStartTime = Process.StartTime;
TimeSpan pProcTime = Process.TotalProcessorTime;
string pThreads = Process.Threads.ToString();
int pSessionId = Process.SessionId;
int pId = Process.Id;
long pRam = Process.VirtualMemorySize64;
string pMachineName = Process.MachineName;
int pPriority = Process.BasePriority;



ProcessTable.Rows.Add(Process.ProcessName
,Process.StartTime
,Process.TotalProcessorTime
,Process.Threads
,Process.SessionId
,Process.Id
,Process.VirtualMemorySize64
,Process.MachineName
,Process.BasePriority);
}
catch(Win32Exception e)
{
logger.LogWarning($"Error reading process {process.ProcessName}", e.Message);
}
}

关于c# - .NET Process.GetProcesses() "Access is denied.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41656259/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com