From 19097ff1d5f1c9abbade5dd7aae48da79b105346 Mon Sep 17 00:00:00 2001 From: huangm199 <164614555+huangm199@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:32:39 +0800 Subject: [PATCH] fix(windows): preserve Program Files env for commands --- internal/tool/command/command.go | 2 +- .../tool/command/command_env_windows_test.go | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 internal/tool/command/command_env_windows_test.go diff --git a/internal/tool/command/command.go b/internal/tool/command/command.go index abddd9a..5e838f1 100644 --- a/internal/tool/command/command.go +++ b/internal/tool/command/command.go @@ -410,7 +410,7 @@ func (svc *Service) internalCommandEnv(extra map[string]string) ([]string, error func (svc *Service) baseCommandEnv() (map[string]string, error) { env := map[string]string{} - for _, key := range []string{"PATH", "LANG", "LC_ALL", "SSL_CERT_FILE", "SSL_CERT_DIR", "SYSTEMROOT", "WINDIR", "COMSPEC", "PATHEXT", "TEMP", "TMP", "WSLENV"} { + for _, key := range []string{"PATH", "LANG", "LC_ALL", "SSL_CERT_FILE", "SSL_CERT_DIR", "SYSTEMROOT", "WINDIR", "COMSPEC", "PATHEXT", "TEMP", "TMP", "WSLENV", "PROGRAMFILES", "PROGRAMW6432"} { if value := os.Getenv(key); value != "" { env[key] = value } diff --git a/internal/tool/command/command_env_windows_test.go b/internal/tool/command/command_env_windows_test.go new file mode 100644 index 0000000..72d78b6 --- /dev/null +++ b/internal/tool/command/command_env_windows_test.go @@ -0,0 +1,47 @@ +//go:build windows + +package command + +import ( + "strings" + "testing" + + "github.com/uvwt/agentdock/internal/config" + "github.com/uvwt/agentdock/internal/envstore" +) + +func TestCommandEnvPreservesWindowsProgramFilesVariables(t *testing.T) { + home := t.TempDir() + envs, err := envstore.New(home) + if err != nil { + t.Fatal(err) + } + svc := New( + func() config.Config { return config.Config{AgentDockHome: home, AgentDockDefaultDir: home} }, + nil, + envs, + NewSessionStore(), + nil, + nil, + nil, + ) + + t.Setenv("PROGRAMFILES", `C:\Program Files`) + t.Setenv("PROGRAMW6432", `C:\Program Files`) + got, err := svc.CommandEnv("", nil) + if err != nil { + t.Fatal(err) + } + values := map[string]string{} + for _, entry := range got { + key, value, ok := strings.Cut(entry, "=") + if ok { + values[key] = value + } + } + for _, key := range []string{"PROGRAMFILES", "PROGRAMW6432"} { + if values[key] != `C:\Program Files` { + t.Fatalf("%s = %q, want %q", key, values[key], `C:\Program Files`) + } + } +}