这几天系统由Win7换成Win8,就把原来写的程序运行了一下,结果发现一个原来运行正常的程序现在报错,原程序如下:
listBox1.Items.Clear(); Process[] processes = Process.GetProcesses(); foreach (Process p in processes) { if (p.Id != 0) { listBox1.Items.Add(String.Format("{0,-30}{1:h:m:s}", p.ProcessName, p.StartTime)); } }错误信息
未处理System.ComponentModel.Win32Exception
HResult=-2147467259
Message=拒绝访问。
Source=System
ErrorCode=-2147467259
NativeErrorCode=5
经过排查发现是Process类的StartTime属性引起的,难道是有些进程的StartTime属性禁止被访问?
果断加try-catch语句,变成:
listBox1.Items.Clear(); Process[] processes = Process.GetProcesses(); foreach (Process p in processes) { //if (p.ProcessName != "Idle") try { //if (p.Id != 0) //{ // listBox1.Items.Add(String.Format("{0,-30}{1:h:m:s}", p.ProcessName, p.StartTime)); //} listBox1.Items.Add(String.Format("{0,-30}{1}", p.ProcessName, p.StartTime)); } catch (Exception ex) { }
随即发现如下进程被拒绝访问:
MsMpEng:拒绝访问。
SearchIndexer:拒绝访问。
atiesrxx:拒绝访问。
lsass:拒绝访问。
dwm:拒绝访问。
csrss:拒绝访问。
csrss:拒绝访问。
services:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
sqlwriter:拒绝访问。
winlogon:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
ZhuDongFangYu:拒绝访问。
WUDFHost:拒绝访问。
spoolsv:拒绝访问。
atieclxx:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
svchost:拒绝访问。
Fuel.Service:拒绝访问。
wininit:拒绝访问。
System:拒绝访问。
svchost:拒绝访问。
smss:拒绝访问。
Idle:拒绝访问。
但是以上进程在Win7中可以被访问,然后本人又实用管理员权限运行程序,发现只有:Idle:拒绝访问,ID:0
现在明白了是为什么了,Win8的权限管理比Win7更严格,所以导致了问题!!