添加多平台支持

This commit is contained in:
2026-07-23 13:10:11 +08:00
parent b692e88bfc
commit 7ba8739285
3 changed files with 23 additions and 13 deletions
Binary file not shown.
Binary file not shown.
+23 -13
View File
@@ -18,31 +18,41 @@ var embeddedFrpc embed.FS
// 获取当前平台对应的 frpc 路径(从 embed 解压到临时目录) // 获取当前平台对应的 frpc 路径(从 embed 解压到临时目录)
func getFrpcPath() (string, error) { func getFrpcPath() (string, error) {
var fileName string var fileName string
if runtime.GOOS == "windows" {
fileName = "frpc.exe" switch {
} else { case runtime.GOOS == "windows" && runtime.GOARCH == "amd64":
fileName = "frpc" fileName = "frpc_windows_amd64.exe"
case runtime.GOOS == "linux" && runtime.GOARCH == "amd64":
fileName = "frpc_linux_amd64"
case runtime.GOOS == "linux" && runtime.GOARCH == "arm64":
fileName = "frpc_linux_arm64"
default:
// 降级:尝试从 PATH 中查找 frpc
path, err := exec.LookPath("frpc")
if err == nil {
return path, nil
}
return "", fmt.Errorf("不支持的平台: %s/%s,且 PATH 中未找到 frpc", runtime.GOOS, runtime.GOARCH)
} }
// 从 embed 读取 // 从 embed 读取对应文件
data, err := embeddedFrpc.ReadFile("bin/" + fileName) data, err := embeddedFrpc.ReadFile("bin/" + fileName)
if err != nil { if err != nil {
// 如果 embed 中没有对应文件,降级到系统 PATH 查找 // 如果 embed 中没有,降级到 PATH
path, err := exec.LookPath(fileName) path, lookErr := exec.LookPath("frpc")
if err != nil { if lookErr == nil {
return "", fmt.Errorf("未找到 frpc 可执行文件(embed 和 PATH 均无): %w", err)
}
return path, nil return path, nil
} }
return "", fmt.Errorf("未找到 frpc 文件 (embed 和 PATH 均无): %w", err)
}
// 写入临时目录 // 写入临时目录
tmpPath := os.TempDir() + "/frpc" tmpPath := os.TempDir() + "/frpc"
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
tmpPath += ".exe" tmpPath += ".exe"
} }
err = os.WriteFile(tmpPath, data, 0755) if err := os.WriteFile(tmpPath, data, 0755); err != nil {
if err != nil { return "", fmt.Errorf("写入临时文件失败: %w", err)
return "", fmt.Errorf("写入临时 frpc 文件失败: %w", err)
} }
return tmpPath, nil return tmpPath, nil
} }