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>
33 lines
829 B
Go
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)
|
|
}
|