C# 尝试获取进程开始时间时“访问被拒绝”

C# 尝试获取进程开始时间时“访问被拒绝”,c#,process,permissions,C#,Process,Permissions,现在我正在尝试获取计算机上运行的所有进程的开始时间。到目前为止,我的代码是: foreach (Process item in Process.GetProcesses()) { txtActivity.AppendText(item.StartTime.ToString()); } 问题是我遇到了以下错误: System.ComponentModel.Win32Exception: 'Access is deni

现在我正在尝试获取计算机上运行的所有进程的开始时间。到目前为止,我的代码是:

foreach (Process item in Process.GetProcesses())
            {
                txtActivity.AppendText(item.StartTime.ToString());
            }
问题是我遇到了以下错误:

System.ComponentModel.Win32Exception: 'Access is denied'

到目前为止,我所看到的关于如何修复这个错误的一切都没有帮助。我尝试过用管理员权限运行它,但没有成功,而在线程上提出的所有其他方法(比如一个)要么不起作用,要么无法在我的机器上执行。非常感谢对这个问题的任何新的帮助。

有些进程似乎是这样的,但我不知道确切的原因。通过将代码包装在try/catch中,您可以发现哪些进程正在执行此操作,因此您可以查看引发异常的进程的名称

比如说

样本输出


在Windows中,某些进程属性受保护,称为安全属性 而Process.StartTime是安全属性之一

只有当应用程序用户是性能日志用户组的成员或在计算机安全策略中启用它时,才能读取安全属性

为了实现这一点

单击开始,在搜索框中单击,键入secpol.msc,然后按ENTER键。本地安全策略管理单元将在Microsoft管理控制台中打开

在导航窗格中,展开“本地策略”,然后单击“用户权限分配”

在控制台窗格中,右键单击作为批处理作业登录,然后单击属性

在属性页面中,单击添加用户或组

在“选择用户或组”对话框中,单击“对象类型”。在“对象类型”对话框中选择“组”,然后单击“确定”

在“选择用户或组”对话框中键入性能日志用户,然后单击“确定”

在“属性”页面中,单击“确定”

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();
}