How to Fix High CPU Usage by TrustedInstaller.exe on Windows Server 2008 x64


2 views

TrustedInstaller.exe is the Windows Modules Installer service (TiWorker.exe) responsible for Windows Update installations, component servicing, and system file modifications. When active, it typically appears as TrustedInstaller.exe in Task Manager with high CPU usage during:

  • Pending Windows Updates installations
  • Component Store (WinSxS) maintenance
  • System file repairs via DISM or SFC

For Windows Server 2008 R2 x64 systems, try these technical solutions:

# Check for pending updates
Get-WmiObject -Class Win32_QuickFixEngineering | Sort-Object -Property InstalledOn -Descending

# Force stop the service (admin CMD)
net stop TrustedInstaller
taskkill /f /im TrustedInstaller.exe
sc config TrustedInstaller start= disabled

Since you mentioned the service is set to Manual, we can create a scheduled task to monitor and restart it only when needed:

# PowerShell monitoring script
$CPUThreshold = 90
$Process = Get-Process TrustedInstaller -ErrorAction SilentlyContinue

if ($Process -ne $null -and $Process.CPU -gt $CPUThreshold) {
    Stop-Process -Name TrustedInstaller -Force
    Start-Service TrustedInstaller
}

High CPU often correlates with WinSxS maintenance. Run these commands during maintenance windows:

DISM /Online /Cleanup-Image /AnalyzeComponentStore
DISM /Online /Cleanup-Image /StartComponentCleanup
DISM /Online /Cleanup-Image /RestoreHealth

For persistent issues, adjust the Windows Update timing parameters:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate]
"AutoInstallMinorUpdates"=dword:00000000
"ScheduledInstallDay"=dword:00000000

Create a performance baseline using PerfMon with these counters:

  • Process(TrustedInstaller)\% Processor Time
  • Memory\Available MBytes
  • LogicalDisk(*)\Avg. Disk Queue Length

TrustedInstaller.exe is the Windows Modules Installer service executable responsible for handling Windows updates and component installations. When this service runs, it operates under the SYSTEM account and typically has high resource access privileges.

In Windows Server 2008 R2 environments, I've observed these patterns causing excessive CPU usage:

  • Pending Windows Updates that failed to install properly
  • Corrupted Component Store (WinSxS folder)
  • Conflict with other maintenance tasks running simultaneously

When you notice sustained high CPU usage:

net stop TrustedInstaller
sc config TrustedInstaller start= disabled

This stops the service temporarily and prevents automatic restart. Remember to re-enable it later for system maintenance:

sc config TrustedInstaller start= demand

To identify the root cause, run these PowerShell commands (requires admin rights):

Get-WinEvent -LogName "Application" | Where-Object {$_.ProviderName -eq "Microsoft-Windows-WindowsUpdateClient"} | Format-List

For checking component store health:

DISM /Online /Cleanup-Image /AnalyzeComponentStore

Based on my troubleshooting experience, these methods work best:

Method 1: Reset Windows Update Components

net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start wuauserv
net start cryptSvc
net start bits
net start msiserver

Method 2: Repair System Files

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

For controlled maintenance, create a scheduled task that runs only during off-hours:

$action = New-ScheduledTaskAction -Execute "TrustedInstaller.exe"
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
Register-ScheduledTask -TaskName "ControlledTrustedInstaller" -Action $action -Trigger $trigger -User "SYSTEM"

This PowerShell snippet monitors TrustedInstaller CPU usage and logs excessive activity:

while($true) {
    $cpuUsage = (Get-Process TrustedInstaller -ErrorAction SilentlyContinue).CPU
    if($cpuUsage -gt 50) {
        $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
        "$timestamp - High CPU detected: $cpuUsage" | Out-File "C:\TrustedInstaller_Monitor.log" -Append
        Stop-Process -Name TrustedInstaller -Force
    }
    Start-Sleep -Seconds 30
}