这几天系统由Win7换成Win8,就把原来写的程序运行了一下,结果发现一个原来运行正常的程序现在报错,原程序如下:

   
   
   
   
  1. listBox1.Items.Clear(); 
  2. Process[] processes = Process.GetProcesses(); 
  3. foreach (Process p in processes) 
  4. if (p.Id != 0) 
  5.     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语句,变成:

 

   
   
   
   
  1. listBox1.Items.Clear(); 
  2.             Process[] processes = Process.GetProcesses(); 
  3.             foreach (Process p in processes) 
  4.             { 
  5.                 //if (p.ProcessName != "Idle") 
  6.                 try 
  7.                 { 
  8.                     //if (p.Id != 0) 
  9.                     //{ 
  10.                     //    listBox1.Items.Add(String.Format("{0,-30}{1:h:m:s}", p.ProcessName, p.StartTime)); 
  11.                     //} 
  12.                     listBox1.Items.Add(String.Format("{0,-30}{1}", p.ProcessName, p.StartTime)); 
  13.                 } 
  14.                 catch (Exception ex) 
  15.                 { 
  16.                 } 

成功!

 

随即发现如下进程被拒绝访问:

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更严格,所以导致了问题!!