[Bug] Windows update installer silently fails to replace claude.exe binary
Bug Description
## Summary
On Windows 11, both claude update and the official PowerShell installer
(irm https://claude.ai/install.ps1 | iex) report successful installation
of a new version, but claude.exe on disk is never actually replaced.
## Environment
- OS: Windows 11 Pro
- Install type: native installer (single-binary, 245 MB)
- Install path: C:\Users\<user>\.local\bin\claude.exe
- Installed version before: 2.1.113
- Claimed version after install: 2.1.114
- Actual version after install: 2.1.113 (file unchanged)
## Reproduction
1. Have Claude Code 2.1.113 installed on Windows via native installer.
2. Run claude update — reports "Successfully updated from 2.1.113 to 2.1.114".
3. Run claude --version — still shows 2.1.113.
4. Restart Windows, run installer manually in a clean PowerShell with
no Claude process running: irm https://claude.ai/install.ps1 | iex.
5. Installer outputs "✔ Claude Code successfully installed! Version: 2.1.114".
6. Run claude --version — still shows 2.1.113.
## Objective evidence
- File timestamp of claude.exe does not change across multiple install attempts.
- SHA256 of installed claude.exe:
0e62752f68fc2e15264601279bec58bacb9b8a788497dad2c4a688e43ff2e358
- SHA256 of official 2.1.114 binary (from manifest.json):
6f4a961ea8a1d656c41dd71cbef202cb71d13c443f86818c721167c33f8a51fd
- ~/.claude/downloads/ remains empty after installer runs.
- Downloading the official binary manually from
https://downloads.claude.ai/claude-code-releases/2.1.114/win32-x64/claude.exe
and moving it to .local/bin/claude.exe works correctly.
## Likely cause
The install subcommand of the bootstrap-downloaded binary (invoked by
bootstrap.ps1 as & $binaryPath install) appears to swallow the
Access is denied exception when overwriting the target .exe on Windows
and still returns exit code 0, producing a false-success path.
## Regression note
Previously, auto-updates applied successfully even with active Claude sessions
open overnight. As of 2.1.113, updates no longer apply regardless of session state.
## Workaround
1. Download the official binary directly from the release CDN:
https://downloads.claude.ai/claude-code-releases/<version>/win32-x64/claude.exe
2. Verify SHA256 against manifest.json from the same release folder.
3. Close all claude.exe processes (Task Manager).
4. Move-Item -Force <downloaded.exe> "$env:USERPROFILE\.local\bin\claude.exe"
## Suggested fix
In the install subcommand of the Windows binary:
- Check the exit code / exception of the file copy step.
- Fail loudly with exit code != 0 and a clear error message if the target
cannot be overwritten (e.g., "claude.exe is in use — close all Claude
Code sessions and try again").
- Consider using MoveFileEx with MOVEFILE_REPLACE_EXISTING (or
MOVEFILE_DELAY_UNTIL_REBOOT as a fallback) to allow atomic replacement
of the locked binary.
Environment Info
- Platform: win32
- Terminal: pycharm
- Version: 2.1.114
- Feedback ID: a9e502da-80f5-42b6-a10c-28f07f979164
Errors
[]This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗