SQL Server 2005 安裝程式系統配置檢查器(SCC)報錯:「計數器登錄值不正確,請手動在登錄表中增加計數器登錄表項值」。
SCC 驗證 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 下的 Last Counter 與 Last Help 值,必須與語言子機碼(如 009 英文、004 中文)中的最大 Counter/Help 值一致。
regedit.exe
-- Windows 2000 使用 regedt32.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
記錄當前值:
Last Counter (REG_DWORD) 例:0x00000ed4 (5276)Last Help (REG_DWORD) 例:0x00000ed5 (5277)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\004 -- 中文環境關鍵
-- 009 為英文,004 為繁體/簡體中文
查看 Counter 與 Help 字串值中的最大索引號碼。
Perflib\Last Counter ≠ Perflib\004\Counter 最大值 → 修改 Last CounterPerflib\Last Help ≠ Perflib\004\Help 最大值 → 修改 Last Help作者環境:
Perflib\Last Counter = 5276,Last Help = 5277Perflib\009(英文)最大值匹配Perflib\004(中文)最大值為 不同數值Last Counter/Last Help 改為與 004 一致 → 安裝通過
# 需系統管理員權限執行
$perflib = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib'
$lang = '004' # 中文環境,英文用 009
$maxCounter = (Get-ItemProperty "$perflib\$lang").Counter -split '\s+' |
ForEach-Object { if ($_ -match '^\d+$') { [int]$_ } } | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
$maxHelp = (Get-ItemProperty "$perflib\$lang").Help -split '\s+' |
ForEach-Object { if ($_ -match '^\d+$') { [int]$_ } } | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
Set-ItemProperty $perflib -Name 'Last Counter' -Value $maxCounter
Set-ItemProperty $perflib -Name 'Last Help' -Value $maxHelp
Write-Host "Fixed: Last Counter=$maxCounter, Last Help=$maxHelp"
Perflib 分支備份