2011-03-01 172 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

相關問題