2011-03-01 144 views
0

我试图获取正在运行的应用程序的名称(mozila,visual studio等)我尝试代码波纹管但我的“拒绝访问”异常。我不知道如何解决这个问题?无法获取正在运行的应用程序的名称

StringBuilder sb = new StringBuilder(); 

       foreach (Process p in Process.GetProcesses(".")) 
       { 
        try 
        { 
         foreach (ProcessModule pm in p.Modules) 
         { 
          sb.Append("Image Name:\t" + 
           pm.ModuleName.ToString() 
           + Environment.NewLine); 

          sb.Append("File Path:\t\t" + 
           pm.FileName.ToString() + 
           Environment.NewLine); 

          sb.Append("Memory Size:\t" + 
           pm.ModuleMemorySize.ToString() + 
           Environment.NewLine); 

          sb.Append("Version:\t\t" + 
           pm.FileVersionInfo.FileVersion.ToString() + 
           Environment.NewLine); 

          sb.Append(Environment.NewLine); 
         } 
        } 
        catch { } 
       } 
+2

取而代之的是空捕获将异常消息和堆栈跟踪放在一个字符串中并向我们显示堆栈跟踪,或者使用记录器类。尽可能避免像这样的空无用捕获:) – 2011-03-01 09:56:10

+0

检查安全问题,如:你是管理员,UAC是否打开? – 2011-03-01 09:58:35

+0

以管理员身份运行您的应用 – 2011-03-01 10:04:55

回答

3

您的代码没问题,这是特权问题。

也许你正在尝试在没有权限访问此API的用户帐户下获得此权限。

有所谓像性能计数器用户组,帐户添加您的应用管理性能计数器用户组。

如果您使用ASP.NET,ASPNET帐户(默认配置)没有权限访问此API。

+0

我正在使用Windows服务。 UAC已关闭。我是管理员。但我想到别的东西。我运行的这个Windows 7安装在我的MAC OS X上的虚拟机上。有没有可能是这个问题? – 1110 2011-03-01 10:11:30

+0

是的,你是管理员,但是哪个用户帐户正在运行你的服务?启动services.msc,查看您的服务的“登录为”列。 – Branimir 2011-03-01 10:17:32

+0

登录由于我的服务列是'本地服务' – 1110 2011-03-01 10:21:08

0

啊我解决了。我将帐户类型从“本地服务”更改为“本地系统”。

+0

这不是一个真正的答案,你应该添加这个作为对Branimir的回答的评论,因为你已经接受了,他似乎帮助了你。 – Benjol 2011-03-02 10:09:23

相关问题