daShangDao_psiWebApp/verifyTool/launcher/launcher.go
2026-06-03 10:53:47 +08:00

82 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"encoding/json"
"fmt"
"log"
"net/url"
"os"
"os/exec"
"path/filepath"
"strings"
)
// ConfigPath 是 launcher 和前端约定的配置文件路径(用户目录下)
const ConfigPath = "%APPDATA%\\cards_web\\launcher_config.json"
func main() {
// 解析命令行参数kfzgs://launch?dir=C%3A%5CverifyTool
if len(os.Args) < 2 {
log.Fatal("缺少参数,请通过 kfzgs:// 协议调用")
}
rawURL := os.Args[1]
// 去掉协议头
if !strings.HasPrefix(rawURL, "kfzgs://") {
log.Fatalf("不识别的协议: %s", rawURL)
}
// 解析 URL
parsed, err := url.Parse(rawURL)
if err != nil {
log.Fatalf("解析 URL 失败: %v", err)
}
// 从 query 参数读取 dir
dir := parsed.Query().Get("dir")
if dir == "" {
// 如果 URL 中没有 dir 参数,尝试从本地配置文件读取
dir = readConfigDir()
}
if dir == "" {
log.Fatal("未找到程序所在路径,请先在前端页面配置")
}
// 组装目标 exe 路径
exePath := filepath.Join(dir, "kfz-goods-pricing.exe")
// 检查文件是否存在
if _, err := os.Stat(exePath); os.IsNotExist(err) {
log.Fatalf("程序不存在: %s", exePath)
}
// 启动目标 exe不等待退出
cmd := exec.Command(exePath)
cmd.Dir = dir
// 把输出打印到日志,方便调试
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
log.Fatalf("启动失败: %v", err)
}
fmt.Printf("已启动: %s (PID: %d)\n", exePath, cmd.Process.Pid)
}
// readConfigDir 读取本地配置文件中的 dir 路径
func readConfigDir() string {
configPath := os.ExpandEnv(ConfigPath)
data, err := os.ReadFile(configPath)
if err != nil {
return ""
}
var cfg struct {
Dir string `json:"dir"`
}
if err := json.Unmarshal(data, &cfg); err != nil {
return ""
}
return cfg.Dir
}