[BUG] Windows installer reports success but fails to create claude.exe in target directory
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
The Windows PowerShell installer script (install.ps1) reports successful installation but fails to actually create the claude.exe file in the target directory C:\Users\<username>\.local\bin\.
Environment
- OS: Windows 11 Pro (Build 10.0.26200)
- PowerShell Version: 7.5.4
- Claude Code Version: 2.0.67
- Installation Method: PowerShell script via
irm https://claude.ai/install.ps1 | iex
Root Cause Analysis
After examining the installer script, the issue appears to be in this flow:
- Script downloads
claude.exeto temporary location:$env:USERPROFILE\.claude\downloads\claude-$version-$platform.exe - Script runs
& $binaryPath installto set up the launcher - The
installsubcommand reports success but fails to create the executable - Script deletes the temporary file in the
finallyblock
When running the installer manually:
$GCS_BUCKET = "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases"
$version = Invoke-RestMethod -Uri "$GCS_BUCKET/stable"
$platform = "win32-x64"
$downloadPath = "$env:USERPROFILE\Downloads\claude-installer.exe"
Invoke-WebRequest -Uri "$GCS_BUCKET/$version/$platform/claude.exe" -OutFile $downloadPath
& $downloadPath install stable
It produces the same "successfully installed" message but does not actually create the file at the reported location.
Directory Permissions
Permissions are correct and allow full control:
Path : C:\Users\Cody\.local\bin
Owner : BUILTIN\Administrators
Access : NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administrators Allow FullControl
COMPUTERNAME\Cody Allow FullControl
Workaround
Manual installation works:
# Download the installer
$GCS_BUCKET = "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases"
$version = Invoke-RestMethod -Uri "$GCS_BUCKET/stable"
$platform = "win32-x64"
$downloadPath = "$env:USERPROFILE\Downloads\claude-installer.exe"
Invoke-WebRequest -Uri "$GCS_BUCKET/$version/$platform/claude.exe" -OutFile $downloadPath
# Manually copy to target location
New-Item -ItemType Directory -Force -Path "C:\Users\$env:USERNAME\.local\bin"
Copy-Item $downloadPath "C:\Users\$env:USERNAME\.local\bin\claude.exe"
# Add C:\Users\<username>\.local\bin to PATH manually through System Properties
What Should Happen?
The claude.exe file should be created at C:\Users\Cody\.local\bin\claude.exe` and be executable.
Actual Behavior
- The installer reports "✔ Claude Code successfully installed!"
- The installer reports the location as
C:\Users\Cody\.local\bin\claude.exe - The installer warns that "claude command not found at C:\Users\Cody\.local\bin\claude.exe"
- The directory
C:\Users\Cody\.local\bin\exists but is empty (or does not containclaude.exe) - Running
claudefails with "command not found"
Error Messages/Logs
Steps to Reproduce
- Run the installer:
``powershell``
irm https://claude.ai/install.ps1 | iex
- Observe the output:
````
Setting up Claude Code...
✔ Claude Code successfully installed!
Version: 2.0.67
Location: C:\Users\Cody\.local\bin\claude.exe
Next: Run claude --help to get started
⚠ Setup notes:
• installMethod is native, but claude command not found at C:\Users\Cody\.local\bin\claude.exe
• Native installation exists but C:\Users\Cody\.local\bin is not in your PATH.
- Check the directory:
``powershell``
Get-ChildItem C:\Users\Cody\.local\bin\
Result: Directory is empty
- Verify file doesn't exist:
``powershell`
Test-Path "C:\Users\Cody\.local\bin\claude.exe"
False`
Result:
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
--
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
Windows Terminal
Additional Information
- This appears to be a bug in the
claude.exe installsubcommand itself, not the PowerShell wrapper script - The issue affects the native Windows installation method
- The installer provides misleading success feedback when the operation actually failed
9 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
& ([scriptblock]::Create((irm https://claude.ai/install.ps1))) latest
this worked for me in powershell
Root Cause Analysis
I debugged this issue and found the specific cause in the native installer's version check logic.
Debug Log Evidence
From
~\.claude\debug\latestafter running the installer:The Bug
The installer's logic appears to be:
But it should be:
The installer correctly detects that it's running version 2.0.67 and the target is 2.0.67 (stable), so it says "no update needed" and skips copying itself to the target directory. But it never checks whether the target file actually exists first.
Reproduction Sequence
claude.exeto~\.claude\downloads\claude-2.0.67-win32-x64.exe& $binaryPath install stable~\.local\bin\claude.exeWorkaround
Manually download the binary directly to the target location:
Suggested Fix
In the native installer's
installLatestfunction, before checking version match, first verify that the target binary exists at~\.local\bin\claude.exe. If it doesn't exist, always perform the copy regardless of version.This is a duplicate of #14902
Hi,
I faced this issue on PowerShell
So i tried the installation with CMD :
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmdand it worksWindows Native Installation Fix Workaround
Quick Fix (PowerShell) - No Download Needed
Full Installer Script
View source on GitHub Gist
PowerShell
Bash / Git Bash / Cygwin
Why It Works
The
latestargument bypasses the version-check bug inclaude.exe install(#14942).Root cause: The installer checks if
runningVersion == targetVersionand skips copying the binary - but doesn't verify the target file actually exists.What The Script Does
claude.exe install latest(bypasses the bug)Requirements
Appreciate the info everyone, it seems like the installer is basically just checking the version number and skipping the rest without making sure the files actually exist. If you are stuck, adding the word latest to the end of your install command should force it to bypass that check and get the files copied correctly for now. Hopefully that helps anyone else running into this while the team looks into the actual logic fix. Do we want to close this issue or keep open until the installer's logic is fixed?
This should be closed as a duplicate of #14902
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.