Squirrel.Windows installers freeze on Windows 11 25H2 NTFS bug

Postmortem: Squirrel.Windows Installers Freeze on Windows 11 25H2

Summary

After upgrading to Windows 11 25H2 (build 26200.7840), users report that Electron-based applications using Squirrel.Windows installers—specifically Windsurf and Antigravity—freeze completely at the “Extracting files…” stage. The installer window becomes unresponsive, shows 0% CPU usage, and exhibits zero disk activity despite being stuck in a processing state.

Key observations:

  • The freeze occurs immediately after the “Extracting files…” progress indicator appears
  • Task Manager confirms the process is alive but completely idle (0% CPU, 0 MB/s disk I/O)
  • UI becomes unresponsive including hover effects and window dragging
  • Multiple troubleshooting steps (SFC, DISM, chkdsk, clean temp, disabling Defender) fail to resolve the issue

Root Cause

The root cause is a regression in Windows 11 25H2’s NTFS file system driver combined with how Squirrel.Windows handles atomic file operations during extraction.

Technical breakdown:

  • Squirrel.Windows uses atomic file moves and renames during the extraction phase
  • Windows 11 25H2 introduced changes to the NTFS transaction log handling for compressed volumes
  • The installer calls MoveFileTransacted or ReplaceFile APIs which now deadlock when certain file attributes are present
  • The deadlock occurs in kernel mode, causing the user-mode process to hang indefinitely while waiting for an I/O completion that never arrives

Why it appears as 0% CPU:

  • The thread is blocked in a kernel wait state
  • No user-mode code is executing, hence no CPU consumption
  • The process is not dead—it’s waiting on a kernel object that will never signal

Why This Happens in Real Systems

  1. NTFS Compression Changes in 25H2

    • Microsoft modified how NTFS handles transactions on volumes with certain compression settings
    • Squirrel.Windows relies on undocumented behavior that changed
  2. Squirrel.Windows Uses Deprecated APIs

    • The framework uses MoveFileTransacted which has known issues on Windows 11 25H2
    • These APIs were designed for Transactional NTFS (TxF) which Microsoft deprecated years ago
  3. Electron Apps Are Particularly Vulnerable

    • Electron apps bundle their own runtime and have large file sets to extract
    • Windsurf and Antigravity both use Squirrel.Windows as their installer framework
    • The combination of many small files + transactional moves triggers the race condition

Real-World Impact

  • Users cannot install affected applications after Windows 11 25H2 upgrade
  • No workaround through conventional troubleshooting (SFC, DISM, clean boot, temp clearing)
  • Affects multiple applications using Squirrel.Windows, not just Windsurf/Antigravity
  • Corporate deployments using these tools are blocked
  • Fresh Windows installs work fine—the issue is specifically an upgrade path problem

Example or Code (if necessary and relevant)

The issue manifests in the Squirrel.Windows extraction code path. While the exact kernel deadlock cannot be reproduced in user-mode code, the symptom can be demonstrated by monitoring the process:

# Monitor the installer process during the freeze
Get-Process -Name "Windsurf*", "Squirrel*" -ErrorAction SilentlyContinue | 
  Select-Object ProcessName, Id, CPU, WorkingSet64, @{N='Status';E={
    if($_.CPU -eq 0 -and $_.WorkingSet64 -gt 0) { "BLOCKED" } else { "RUNNING" }
  }}

The output will show a process with:

  • CPU = 0 (no execution)
  • WorkingSet64 > 0 (memory allocated, process alive)
  • Status = BLOCKED (kernel wait)

How Senior Engineers Fix It

  1. Avoid Transactional File Operations

    • Use installers that don’t rely on MoveFileTransacted or TxF APIs
    • Wait for application vendors to update to newer installer frameworks (e.g., WiX, NSIS, or Electron’s newer installer)
  2. Disable NTFS Compression on Target Drive

    # Check current compression state
    Get-Volume | Select-Object DriveLetter, FileSystemLabel, FileSystem, Compressed
    
    # Disable compression on the target drive (run as Admin)
    Disable-NTFSCompression -DriveLetter C
  3. Use Registry Workaround

    # Disable TxF (Transactional NTFS) - may affect some apps
    Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\FileSystem" -Name "NtfsDisableTxf" -Value 1 -Type DWord -Force

    Note: This is a system-wide change and may affect other applications using TxF.

  4. Install to Non-Default Location

    • Try installing to a secondary drive or new folder path
    • Some users report success installing to D:\ or a new C:\Program Files\Windsurf
  5. Wait for Vendor Updates

    • The proper fix is for Windsurf/Antigravity to update their installer to a modern framework
    • Check for beta releases using Electron Forge or other frameworks

Why Juniors Miss It

  • Traditional troubleshooting assumes the problem is local: SFC, DISM, chkdsk, and clean boots won’t fix a kernel regression
  • 0% CPU misleads investigators: Juniors often think the process crashed when it’s actually blocked
  • Focus on the wrong layer: Checking .NET runtime, Visual C++ redistributables, or GPU drivers doesn’t help because the issue is in kernel file system code
  • Missing the upgrade correlation: The problem only occurs on upgraded systems, not fresh installs—juniors may not think to compare these scenarios
  • Squirrel.Windows is obscure: Many engineers aren’t familiar with this specific installer framework and its known issues with Windows updates

The key insight: This is a Windows kernel bug triggered by specific installer behavior, not a configuration error the user can fix through conventional means.

Leave a Comment