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

 

 

 

posted @ 2026-09-03 11:26  人间春风意  阅读(27)  评论(0)    收藏  举报