![](/img/trans.png)
[英]ASP.NET MVC: Requested registry access denied when creating performance counters
[英]Performance Counters Registry validation
我有一個C#應用程序,它在啟動時會添加一些性能計數器。 但是,如果注冊表HKEY_LOCAL_MACHINE-> SOFTWARE-> Microsoft-> Windows NT-> CurrentVersion-> Perflib已損壞(丟失或無效數據),則檢查性能計數器是否存在的操作(PerformanceCounterCategory.Exists(category)確實需要長時間(大約30秒)之后才引發異常(InvalidOperation:類別不存在)。
我的問題是,在嘗試添加性能計數器之前,我如何才能驗證注冊表的有效性(以及有效性的含義),或者是否有一種方法可以使性能計數器操作超時,從而無需花費30秒鍾即可獲得一個例外。
我懷疑“有效性”是您不了解的內部實現細節。 但是,您至少可以嘗試打開相同的注冊表項,然后看看它們是否存在。 您可以使用Process Explorer找出正在讀取的鍵。
但是,我質疑您為什么還要關心。 損壞的注冊表不應該是很常見的事情,如果是的話,您將如何處理? 你所能做的就是戒煙。 因此,您最好只捕獲異常。 我會像對待其他任何阻塞操作一樣對待它,並在輔助線程(而不是UI線程)上執行此操作,並向用戶顯示進度,以便他們知道您的應用未掛起。
您確定注冊表已損壞?
我發現我的程序沒有在運行時創建性能計數器的權限。 相反,我將計數器的創建添加到了我的安裝程序中,並且該安裝程序必須以管理員身份運行。 在運行時,我的程序可以訪問或更新已創建的計數器。
我不知道如何按照要求回答您的問題,但是如果我理解正確,那么問題在於,它看起來像是應用程序在啟動時掛起了30秒。
如果是這樣,我建議您可以通過創建一個工作線程,告訴它創建性能監視器,然后繼續啟動應用程序來避免這種情況。
我沒有使用性能計數器,所以我不能說是否有什么可以阻止其工作?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.