visionA/local-tool/visiona-local/platform_windows.go
jim800121chen 8e7b6ae435 feat(local-tool): clean build 為預設 + 藏 server 小黑窗 + 預設真實模式
Makefile:
- 新增 clean-all target:clean + wails build/ + frontend build/ + server embed
- 新增 clean-build-exe / clean-build-dmg / clean-build-appimage

bootstrap-windows.ps1:
- 預設改為 clean build(每次重做 wails + server binary + frontend embed)
- 保留 vendor/ 快取避免重下 200MB+ 第三方相依
- 需要 fast path(只重跑 iscc)時設 VISIONA_FAST=1

app.go:
- configureSysProcAttr() 注入子行程,Windows 下 CREATE_NO_WINDOW 藏掉 server 小黑窗
- 覆蓋 server spawn / tar 解壓 / venv 建立 / pip install 四個關鍵點
- mockMode 預設改 false(依使用者決策 Q8,預設走真實硬體模式)
  需要強制 mock 時設環境變數 VISIONA_MOCK=1

platform_{windows,darwin,linux}.go:
- 新增 configureSysProcAttr(cmd):Windows 設 HideWindow + CREATE_NO_WINDOW,
  macOS/Linux 空實作

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 04:25:09 +08:00

33 lines
829 B
Go

//go:build windows
package main
import (
"os"
"os/exec"
"path/filepath"
"syscall"
)
// configureSysProcAttr 設定子行程的 Windows 特有屬性。
// CREATE_NO_WINDOW (0x08000000) 讓 server 子行程不彈 console 視窗(小黑窗)。
// HideWindow 對某些情境也一起加保險。
func configureSysProcAttr(cmd *exec.Cmd) {
if cmd.SysProcAttr == nil {
cmd.SysProcAttr = &syscall.SysProcAttr{}
}
cmd.SysProcAttr.HideWindow = true
cmd.SysProcAttr.CreationFlags |= 0x08000000 // CREATE_NO_WINDOW
}
// platformDataDir 回傳 Windows 的應用程式資料目錄。
// %APPDATA%\visiona-local
func platformDataDir() string {
appdata := os.Getenv("APPDATA")
if appdata == "" {
home, _ := os.UserHomeDir()
appdata = filepath.Join(home, "AppData", "Roaming")
}
return filepath.Join(appdata, appName)
}