1
私は以下のコードを使用して現在のマシン上で実行中のプロセスのリストを取得しようとしています:.NET Process.GetProcesses() "アクセスが拒否されました。"
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."}
を私は必要ですかコード内の特権のいくつかの種類ですか?もしそうなら、どうすればいいのですか?
(
Right click exe->Run as Administrator
)特権であなたのアプリケーションを実行しようとすることができます。 –スタックトレースを含めると、失敗した行が表示されますが、@ ZoranHorvatは正しいと思います。 – Michael
Windowsでは、プロセスから照会できるデータに制限があります。例外を適切に処理し、エンドユーザーに許可されていないものを表示する必要があります。 –