package ocr import ( "fmt" "os" "os/exec" "path/filepath" "psi/config" "runtime" ) var ( ocrServiceCmd *exec.Cmd ) func StartService() { if err := startOCRService(); err != nil { fmt.Fprintf(os.Stderr, "启动 OCR 服务失败: %v\n", err) os.Exit(1) } fmt.Println("OCR 服务已就绪") } func startOCRService() error { exePath := getOCRServiceExePath() if _, err := os.Stat(exePath); os.IsNotExist(err) { return fmt.Errorf("找不到 OCRService 可执行文件: %s", exePath) } ocrServiceCmd = exec.Command(exePath) ocrServiceCmd.Stdout = os.Stdout ocrServiceCmd.Stderr = os.Stderr err := ocrServiceCmd.Start() if err != nil { return err } fmt.Println("OCR 服务进程已启动,PID:", ocrServiceCmd.Process.Pid) return nil } func getOCRServiceExePath() string { basePath := config.AppConfig.OCR.ExeUrl if runtime.GOOS == "windows" { if filepath.Ext(basePath) != ".exe" { return basePath + ".exe" } return basePath } if filepath.Ext(basePath) == ".exe" { return basePath[:len(basePath)-4] } return basePath }