【问题标题】:"Access is denied" when trying to get process start time尝试获取进程开始时间时“访问被拒绝”
【发布时间】:2019-01-12 01:21:11
【问题描述】:
现在我正在尝试获取计算机上运行的所有进程的开始时间。到目前为止我的代码是这样的:
foreach (Process item in Process.GetProcesses())
txtActivity.AppendText(item.StartTime.ToString());
问题是我遇到了这个错误:
System.ComponentModel.Win32Exception: '访问被拒绝'
到目前为止,我所看到的有关如何修复此错误的所有内容都无济于事。我尝试使用管理员访问权限运行它,但没有成功,并且所有其他建议的线程上的方法,如 this 一个要么不起作用,要么无法在我的机器上执行。对此问题的任何新帮助表示赞赏。
【问题讨论】:
标签:
c#
process
permissions
【解决方案1】:
有些进程的行为似乎是这样,但我不知道具体原因。您可以通过将代码包装在 try/catch 中来找出哪些正在执行此操作,这样您就可以查看引发异常的进程的名称。
例如
private static void Main()
{
foreach (Process item in Process.GetProcesses())
{
try
{
Console.WriteLine($"{item.ProcessName} started at: {item.StartTime}");
}
catch(Exception e)
{
WriteColoredLine($"{e.Message}: {item.ProcessName}", ConsoleColor.Red);
}
}
GetKeyFromUser("Done! Press any key to exit...");
}
private static void WriteColoredLine(string message, ConsoleColor color)
{
Console.ForegroundColor = color;
Console.WriteLine(message);
Console.ResetColor();
}
样本输出
【解决方案2】:
在 Windows 中,某些进程属性受到保护 - 它们被称为“安全属性”,Process.StartTime 是安全属性之一。
如果应用程序用户是性能日志用户组的成员或在计算机安全策略中启用它,您只能读取安全属性。
启用此功能
-
单击开始,单击搜索框,键入 secpol.msc,然后按 Enter。本地安全策略管理单元将在 Microsoft 管理控制台中打开。
-
在导航窗格中,展开本地策略并单击用户权限分配。
-
在控制台窗格中,右键单击作为批处理作业登录,然后单击属性。
-
在“属性”页面中,单击“添加用户或组”。
-
在“选择用户或组”对话框中,单击“对象类型”。在“对象类型”对话框中选择“组”,然后单击“确定”。
-
在“选择用户或组”对话框中键入性能日志用户,然后单击“确定”。
-
在属性页面中,单击“确定”。