opencode获取旧版Windows 欢迎页面截图
前提:
需要有旧版的Windows安装包,这里使用旧版v1.15.10 的OpenCode Desktop Installer.exe
背景:
原本之前使用win11,用了一些时间的Opencode,产生了一些共享数据,以及内部DB数据等。
在不卸载旧版OpenCode的情况下,实现复现旧版干净的欢迎界面,方便截图。
先使用7z解压,获取内部的app-64.7z文件,
再解压app-64.7z文件,获取内部的OpenCode.exe文件路径,并指定多个临时变量,就可以不受任何影响的,获取旧版OpenCode Windows 初始欢迎截图了。
powershell -ExecutionPolicy Bypass -File "D:\xxx\old\launch-clean.ps1"
设定临时变量脚本launch-clean.ps1:
# launch-clean.ps1 - clean welcome-screen capture launcher
# Works even when the machine has a newer Opencode installed, by isolating
# every data location under this script's own folder (no C:\ / D:\ reliance).
$base = "$PSScriptRoot\fake-env"
$fakeHome = "$base\fake-home" # avoid HOMEDRIVE/HOMEPATH entirely
# Create all clean data dirs (mirror every location old Opencode may read)
$dirs = @(
"$base\appdata\OpenCode\EBWebView\Default\Local Storage\leveldb",
"$base\appdata\OpenCode\EBWebView\Default\Session Storage",
"$base\appdata\OpenCode\EBWebView\Default\Network",
"$base\localappdata\OpenCode",
"$fakeHome\.config\opencode",
"$fakeHome\.local\share\opencode",
"$fakeHome\AppData\Roaming\OpenCode",
"$fakeHome\AppData\Local\opencode",
"$base\temp"
)
foreach ($d in $dirs) { New-Item -ItemType Directory -Path $d -Force | Out-Null }
# Kill existing
Get-Process OpenCode -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2
$exe = "$PSScriptRoot\app-64\OpenCode.exe"
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = $exe
$psi.UseShellExecute = $false
foreach ($key in [System.Environment]::GetEnvironmentVariables("Process").Keys) {
$psi.EnvironmentVariables[$key] = [System.Environment]::GetEnvironmentVariable($key, "Process")
}
# Override data + home locations, all pointing inside this folder
$psi.EnvironmentVariables["APPDATA"] = "$base\appdata"
$psi.EnvironmentVariables["LOCALAPPDATA"] = "$base\localappdata"
$psi.EnvironmentVariables["HOME"] = $fakeHome
$psi.EnvironmentVariables["USERPROFILE"] = $fakeHome
# Path-agnostic (no HOMEDRIVE/HOMEPATH, they caused non-startup)
$proc = [System.Diagnostics.Process]::Start($psi)
Write-Host "PID: $($proc.Id)"
Start-Sleep -Seconds 10
$proc.Refresh()
Write-Host "Handle: $($proc.MainWindowHandle) Title: '$($proc.MainWindowTitle)'"
目录结构:
app-64/...
fake-env/...
launch-clean.ps1
CLI旧版画面,可新增\opencode-old\1.15.10空目录
在 1.15.10 目录下执行
npm install opencode-ai@1.15.10 --no-fund --no-audit
新增如下脚本:launch-clean.ps1
# launch-clean.ps1 - clean old-version opencode launcher (isolated environment)
# Runs the npm-installed opencode 1.15.10 with every data location pointed
# inside this script's own folder AND in its own separate console window,
# so it never touches your real config/data and never shares your terminal.
$base = "$PSScriptRoot\fake-env"
$fakeHome = "$base\fake-home"
$dirs = @(
"$base\appdata\opencode",
"$base\localappdata\opencode",
"$base\localappdata\OpenCode",
"$fakeHome\.config\opencode",
"$fakeHome\.local\share\opencode",
"$fakeHome\.local\state\opencode",
"$fakeHome\AppData\Roaming\opencode",
"$fakeHome\AppData\Local\opencode",
"$base\temp"
)
foreach ($d in $dirs) { New-Item -ItemType Directory -Path $d -Force -ErrorAction SilentlyContinue | Out-Null }
$exe = "$PSScriptRoot\node_modules\.bin\opencode.cmd"
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = "cmd.exe"
$psi.Arguments = "/c `"start `"opencode 1.15.10 (clean)`" /D `"$PSScriptRoot`" `"$exe`" $($args -join ' ')`""
$psi.UseShellExecute = $false
foreach ($key in [System.Environment]::GetEnvironmentVariables("Process").Keys) {
$psi.EnvironmentVariables[$key] = [System.Environment]::GetEnvironmentVariable($key, "Process")
}
# --- Strip user-level provider credentials/env vars ----------------
# opencode would otherwise "see" OPENAI_API_KEY / QWEN_API_KEY / DASHSCOPE_API_KEY
# etc. inherited from the real user session and show those providers as configured.
$envNames = @($psi.EnvironmentVariables.Keys)
foreach ($name in $envNames) {
if ($name -match '^(OPENAI|ANTHROPIC|GOOGLE|GEMINI|DASHSCOPE|QWEN|DEEPSEEK|OPENROUTER|MOONSHOT|ZHIPU|GLM|BIGMODEL|MISTRAL|TOGETHER|GROQ|CEREBRAS|XAI|GROK|AZURE|OLLAMA)(_|$)') {
$psi.EnvironmentVariables.Remove($name)
}
}
$psi.EnvironmentVariables["APPDATA"] = "$base\appdata"
$psi.EnvironmentVariables["LOCALAPPDATA"] = "$base\localappdata"
$psi.EnvironmentVariables["HOME"] = $fakeHome
$psi.EnvironmentVariables["USERPROFILE"] = $fakeHome
$psi.EnvironmentVariables["XDG_CONFIG_HOME"] = "$fakeHome\.config"
$psi.EnvironmentVariables["XDG_DATA_HOME"] = "$fakeHome\.local\share"
$psi.EnvironmentVariables["XDG_CACHE_HOME"] = "$base\temp"
$psi.EnvironmentVariables["TEMP"] = "$base\temp"
$psi.EnvironmentVariables["TMP"] = "$base\temp"
$psi.EnvironmentVariables.Remove("HOMEDRIVE")
$psi.EnvironmentVariables.Remove("HOMEPATH")
[System.Diagnostics.Process]::Start($psi) | Out-Null
Write-Host "Started opencode 1.15.10 in a new window (isolated env under $base)."
执行:
powershell -ExecutionPolicy Bypass -File "D:\xxx\opencode-old\1.15.10\launch-clean.ps1"
得到如下目录,并直接运行TUI窗口
目录结构生成后为:
opencode-old\1.15.10\
│
├── launch-clean.ps1 ← 干净环境启动脚本(已有)
├── package.json ← npm 初始化生成(可选/已有)
├── package-lock.json ← npm 安装生成(已有)
│
├── node_modules\ ← npm install opencode-ai@1.15.10 生成
│ ├── .bin\
│ │ └── opencode.cmd ← TUI 启动入口
│ └── opencode-ai\
│ ├── bin\
│ │ └── opencode.exe ← 1.15.10 主程序(bun 编译,~141MB)
│ ├── package.json
│ └── postinstall.mjs
│
└── fake-env\ ← 运行时由 launch-clean.ps1 自动创建
├── appdata\opencode ← APPDATA 重定向
├── localappdata\
│ ├── opencode
│ └── OpenCode
├── temp\ ← TEMP/TMP/XDG_CACHE_HOME 重定向
└── fake-home\ ← HOME/USERPROFILE 重定向
├── .config\opencode\ ← 隔离的全局配置(运行时自动填充)
├── .local\
│ ├── share\opencode\ ← 隔离的数据(auth.json/opencode.db 等)
│ └── state\opencode\
└── AppData\
├── Roaming\opencode
└── Local\opencode
作者:人间春风意
扫描左侧的二维码可以赞赏

本作品采用署名-非商业性使用-禁止演绎 4.0 国际 进行许可。

浙公网安备 33010602011771号