fix: Windows repeated install leaves multiple claude.exe files

- Clean up all claude.*.exe (except claude.orig.exe) before each install
- First install: rename claude.exe → claude.orig.exe
- Repeat install: delete claude.exe, fallback to timestamp rename if locked
- No more accumulation of claude.old.exe / claude.timestamp.exe

Fixes #17
This commit is contained in:
0chencc
2026-04-03 21:19:33 +09:00
parent 4851095646
commit b1020f00ab
+17 -6
View File
@@ -446,20 +446,31 @@ foreach ($loc in @(
}
}
# Rename claude.exe so .cmd takes precedence
# (rename works even if the exe is running; delete does not)
# Clean up leftover timestamped/old exes from previous installs
Get-ChildItem $BinDir -Filter "claude.*.exe" -ErrorAction SilentlyContinue |
Where-Object { $_.Name -ne "claude.orig.exe" } |
ForEach-Object { Remove-Item $_.FullName -Force -ErrorAction SilentlyContinue }
# Remove claude.exe so .cmd takes precedence
# Keep one backup as claude.orig.exe, discard the rest
if (Test-Path $claudeExe) {
if (-not (Test-Path $claudeOrigExe)) {
Rename-Item $claudeExe $claudeOrigExe -Force
Write-OK "Renamed claude.exe → claude.orig.exe"
} else {
# Backup already exists, rename to .old for cleanup
$oldExe = Join-Path $BinDir "claude.old.exe"
Rename-Item $claudeExe $oldExe -Force -ErrorAction SilentlyContinue
Write-OK "Moved claude.exe aside (.cmd now takes priority)"
# Backup already exists — just remove the new claude.exe
try {
Remove-Item -Force $claudeExe
} catch {
# File locked (running process) — rename aside with timestamp
$ts = Get-Date -Format "yyyyMMddHHmmss"
Rename-Item $claudeExe "claude.$ts.exe" -Force -ErrorAction SilentlyContinue
}
Write-OK "Removed claude.exe (.cmd now takes priority)"
}
}
# Write .cmd launcher for 'claude'
foreach ($cmd in @("claude")) {
$launcherContent | Set-Content (Join-Path $BinDir "$cmd.cmd") -Encoding ASCII