From 2d4dea242bee749168aa254b9982900cdb453020 Mon Sep 17 00:00:00 2001 From: bookworm Date: Mon, 6 Apr 2026 20:34:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8E=BB=E6=8E=89=20Start-Process,=20ba?= =?UTF-8?q?t=20=E8=B4=9F=E8=B4=A3=E7=AA=97=E5=8F=A3/ps1=20=E8=B4=9F?= =?UTF-8?q?=E8=B4=A3=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: Start-Process pwsh 开新窗口但 claude 找不到 PATH, 同时 OneClick.bat 重复调用 install.ps1 导致双启动。 - install.ps1: 新增 -SkipLaunch 参数, step9 改为同步 & claude - auto-setup.ps1: Phase7 去掉 Start-Process, 同步 & claude - OneClick.bat: step7 加 -SkipLaunch, 最终块 start pwsh -Command claude - 启动/更新.bat: 直接 start pwsh -Command claude (不经 install.ps1) 架构: bat 决定窗口类型, ps1 只管同步执行 Co-Authored-By: Claude Opus 4.6 (1M context) --- Bookworm-OneClick.bat | 14 ++++++-------- auto-setup.ps1 | 15 ++------------- install.ps1 | 12 +++++------- 启动Bookworm.bat | 4 ++-- 更新并启动Bookworm.bat | 19 ++++++++++++------- 5 files changed, 27 insertions(+), 37 deletions(-) diff --git a/Bookworm-OneClick.bat b/Bookworm-OneClick.bat index 5b9f8ae..6f21557 100644 --- a/Bookworm-OneClick.bat +++ b/Bookworm-OneClick.bat @@ -202,12 +202,12 @@ echo [7/8] 执行安装配置... echo. if exist "%INSTALL_DIR%\install.ps1" ( - :: 优先 pwsh (PowerShell 7), 回退 powershell (5.1) + :: 安装配置 (不启动 claude, 最终块负责在 pwsh7 窗口中启动) where pwsh >nul 2>nul if !errorlevel! equ 0 ( - pwsh -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept + pwsh -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept -SkipLaunch ) else ( - powershell -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept + powershell -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept -SkipLaunch ) ) else ( echo [WARN] install.ps1 未找到, 跳过高级配置 @@ -266,14 +266,12 @@ if %ERRORS% gtr 0 ( echo 按任意键启动 Bookworm... pause > nul -:: 启动 — 优先在 pwsh7 新窗口中运行 -cd /d "%INSTALL_DIR%" +:: 启动 — pwsh7 新窗口直接运行 claude where pwsh >nul 2>nul if !errorlevel! equ 0 ( - start "Bookworm Smart Assistant" pwsh -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -StartOnly -AutoAccept -) else if exist "启动Bookworm.bat" ( - call "启动Bookworm.bat" + start "Bookworm Smart Assistant" pwsh -NoLogo -NoExit -Command "& claude --dangerously-skip-permissions" ) else ( + cd /d "%INSTALL_DIR%" powershell -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -StartOnly -AutoAccept ) diff --git a/auto-setup.ps1 b/auto-setup.ps1 index 5c526c6..067e54a 100644 --- a/auto-setup.ps1 +++ b/auto-setup.ps1 @@ -863,13 +863,7 @@ if ($allOK -and $env:ANTHROPIC_API_KEY) { Write-Host "" Log-Info "正在启动 Claude Code..." Write-Host "" - # 始终在独立 pwsh7 窗口中启动 (bat 调 pwsh 子进程时窗口仍属 cmd.exe) - $pwshCmd = Get-Command pwsh -ErrorAction SilentlyContinue - if ($pwshCmd) { - Start-Process $pwshCmd.Source -ArgumentList "-NoLogo", "-NoExit", "-Command", "& claude --dangerously-skip-permissions" -WorkingDirectory $env:USERPROFILE -WindowStyle Normal - } else { - & claude --dangerously-skip-permissions - } + & claude --dangerously-skip-permissions } } else { Write-Host " +---------------------------------------------------+" -ForegroundColor Yellow @@ -885,11 +879,6 @@ if ($allOK -and $env:ANTHROPIC_API_KEY) { $launchResult = Show-MsgBox "安装完成, 但存在以下问题:`n$issueText`n`n是否仍然启动 Claude Code?`n(将以受限模式运行)" "安装警告" "YesNo" "Warning" if ($launchResult -eq "Yes" -and -not $SkipLaunch) { - $pwshCmd = Get-Command pwsh -ErrorAction SilentlyContinue - if ($pwshCmd) { - Start-Process $pwshCmd.Source -ArgumentList "-NoLogo", "-NoExit", "-Command", "& claude --dangerously-skip-permissions" -WorkingDirectory $env:USERPROFILE -WindowStyle Normal - } else { - & claude --dangerously-skip-permissions - } + & claude --dangerously-skip-permissions } } diff --git a/install.ps1 b/install.ps1 index 2f5e7ca..125e3f3 100644 --- a/install.ps1 +++ b/install.ps1 @@ -19,7 +19,8 @@ param( [string]$GitUrl = "https://code.letcareme.com/bookworm/bookworm-config.git", [switch]$StartOnly, [switch]$SkipSecrets, - [switch]$AutoAccept # 豁免所有人工确认环节 + [switch]$SkipLaunch, # 仅安装不启动 (由调用方负责启动) + [switch]$AutoAccept # 豁免所有人工确认环节 ) $ErrorActionPreference = "Stop" @@ -727,12 +728,9 @@ if (-not $StartOnly) { } } -# 始终在独立 pwsh7 窗口中启动 Claude Code -# (bat 调 pwsh 子进程时窗口仍属 cmd.exe, 必须 Start-Process 新建窗口) -$pwshCmd = Get-Command pwsh -ErrorAction SilentlyContinue -if ($pwshCmd) { - Write-Host " [..] 正在启动 Claude Code (PowerShell 7)..." -ForegroundColor Cyan - Start-Process $pwshCmd.Source -ArgumentList "-NoLogo", "-NoExit", "-Command", "& claude --dangerously-skip-permissions" -WorkingDirectory $env:USERPROFILE -WindowStyle Normal +# 启动 Claude Code (同步执行, 窗口类型由调用方 .bat 决定) +if ($SkipLaunch) { + Write-Host " [OK] 安装完成 (由调用方负责启动)" -ForegroundColor Green } else { & claude --dangerously-skip-permissions } diff --git a/启动Bookworm.bat b/启动Bookworm.bat index 6add78d..bab9e73 100644 --- a/启动Bookworm.bat +++ b/启动Bookworm.bat @@ -6,10 +6,10 @@ cd /d "%~dp0" set NO_PROXY=bww.letcareme.com,code.letcareme.com,letcareme.com,localhost,127.0.0.1 set no_proxy=%NO_PROXY% -:: 优先 pwsh7: 启动新 PowerShell 7 窗口, 退出 cmd +:: 优先 pwsh7: 直接在 pwsh7 窗口运行 claude where pwsh >nul 2>nul if %errorlevel% equ 0 ( - start "Bookworm Smart Assistant" pwsh -NoLogo -ExecutionPolicy Bypass -File "%~dp0install.ps1" -StartOnly -AutoAccept + start "Bookworm Smart Assistant" pwsh -NoLogo -NoExit -Command "& claude --dangerously-skip-permissions" exit ) diff --git a/更新并启动Bookworm.bat b/更新并启动Bookworm.bat index 8fadce5..aea69e7 100644 --- a/更新并启动Bookworm.bat +++ b/更新并启动Bookworm.bat @@ -6,19 +6,24 @@ cd /d "%~dp0" set NO_PROXY=bww.letcareme.com,code.letcareme.com,letcareme.com,localhost,127.0.0.1 set no_proxy=%NO_PROXY% -:: 优先 pwsh7: 启动新 PowerShell 7 窗口, 退出 cmd +:: 先更新配置 (在 cmd 中完成) where pwsh >nul 2>nul if %errorlevel% equ 0 ( - start "Bookworm - 更新并启动" pwsh -NoLogo -ExecutionPolicy Bypass -File "%~dp0install.ps1" -AutoAccept + pwsh -NoLogo -ExecutionPolicy Bypass -File "%~dp0install.ps1" -AutoAccept -SkipLaunch +) else ( + powershell -ExecutionPolicy Bypass -File "%~dp0install.ps1" -AutoAccept -SkipLaunch +) + +:: 更新后在 pwsh7 新窗口启动 claude +where pwsh >nul 2>nul +if %errorlevel% equ 0 ( + start "Bookworm Smart Assistant" pwsh -NoLogo -NoExit -Command "& claude --dangerously-skip-permissions" exit ) :: 回退 PowerShell 5.1 -title Bookworm Portable - 更新并启动 -echo. -echo [!] PowerShell 7 未安装, 使用 PowerShell 5.1 -echo. -powershell -ExecutionPolicy Bypass -File install.ps1 -AutoAccept +title Bookworm Portable +powershell -ExecutionPolicy Bypass -File "%~dp0install.ps1" -StartOnly -AutoAccept if %errorlevel% neq 0 ( echo. echo 启动失败,按任意键退出...