添加多平台支持
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user