[IIS] 解決透過ASP.NET取得CPU資訊,卻發生"拒絕存取登錄機碼 'Global'。"的錯誤

[IIS] 解決透過ASP.NET取得CPU資訊,卻發生"拒絕存取登錄機碼 'Global'。"的錯誤

在編寫Web程式的時候,其實多少都會想要知道在IIS上,這個應用程式到底吃了多少的CPU以及記憶體

雖然說可以透過遠端桌面或是直接進入到Console端,使用工作管理員查看,不過畢竟還是比較麻煩一點

所以我參考了這一篇文章

[C#]透過PerformanceCounter取得特定Process的CPU使用率

將程式碼加上的讀取CPU使用率已及記憶體使用量的頁面

但是上到正式主機後,卻發生了下圖的情況

001

上網找了一下相關的資料,發現有可能是與存取機碼RegistryKey有關係,有興趣的人可以參考下列幾篇文章

How to Read Performance Counters Without Administrator Privileges [Ryan Byington]

使用 IIS 6.0 設定應用程式集區身分識別

設定 Windows 服務帳戶與權限

簡單來說,就是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg這一個機碼沒有授予可以讀取的權限

我們可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg這個機碼上點選右鍵,選擇"使用權限"

002

從使用權限可以看到,已經有授權讀取與完全控制的群組與帳號有哪些

003

這樣一來,要解決的話就很簡單了,我們可以從IIS管理員進入到"應用程式集區"中,選擇要設定的應用程式集區,並點選進階設定

004

將"識別"這個欄位的值,從原本的"ApplicationPoolIdentity",更改成"LocalService"

005

由於LocalService這個服務帳戶本身就有讀取RegistryKey的權限,所以設定完,應用程式集區回收後,就可以正常的抓出CPU資訊了

006