2012-01-24 174 views
0

這是代碼:性能計數器拋出拋出:SecurityException

private static void CreateCounter() 
    { 
     if (PerformanceCounterCategory.Exists("DemoCategory")) 
      PerformanceCounterCategory.Delete("DemoCategory"); 

     CounterCreationDataCollection ccdArray = new CounterCreationDataCollection(); 

     CounterCreationData ccd = new CounterCreationData(); 
     ccd.CounterName = "RequestsPerSecond"; 
     ccd.CounterType = PerformanceCounterType.NumberOfItems32; 
     ccd.CounterHelp = "Requests per second"; 
     ccdArray.Add(ccd); 

     PerformanceCounterCategory.Create("DemoCategory", "Demo category", 
      PerformanceCounterCategoryType.SingleInstance, ccdArray); 

     Console.WriteLine("Press any key, to start use the counter"); 
    } 

很明顯:

PerformanceCounterCategory.Create("DemoCategory", "Demo category", 
    PerformanceCounterCategoryType.SingleInstance, ccdArray); 

就是拋出異常的線。

我已閱讀約PerformanceCounterPermission,我該怎麼辦?

+0

修改您的應用程序的清單,使'requestedExecutionLevel'設置爲'requireAdministrator'。 –

+0

@CodyGray已解決。謝謝;) –

+1

不客氣。增加了一個完整的答案(現在我不再使用手機了!),以便您可以接受並解決問題。 –

回答

6

您的應用程序的進程沒有適當的權限級別。這就是安全例外告訴你的。

簡單的修復方法是在您的應用程序啓動時請求該權限。您可以通過修改應用程序的清單來執行此操作,以使requestedExecutionLevel設置爲requireAdministrator

完整的部分添加到您的應用程序的清單將是這個樣子:

<!-- Identify the application security requirements. --> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
    <requestedPrivileges> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    </requestedPrivileges> 
    </security> 
</trustInfo> 

有可能更好的選擇,如果您的應用程序不會否則需要管理員權限,因爲你應該以最低的始終運行絕對必要或必需的特權級別。您可以使用Google調查這些替代方案;它將涉及分離單獨的進程,該進程請求UAC提升並在用戶明確請求時運行性能計數器。

相關問題