Windows端frpc二进制的解压调取逻辑
This commit is contained in:
+13
-3
@@ -50,28 +50,38 @@ func GetFrpcPath() (string, error) {
|
|||||||
return "", fmt.Errorf("不支持的平台: %s/%s", runtime.GOOS, runtime.GOARCH)
|
return "", fmt.Errorf("不支持的平台: %s/%s", runtime.GOOS, runtime.GOARCH)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 尝试从本地 bin 目录加载
|
||||||
localPath := filepath.Join(".", "bin", fileName)
|
localPath := filepath.Join(".", "bin", fileName)
|
||||||
if _, err := os.Stat(localPath); err == nil {
|
if _, err := os.Stat(localPath); err == nil {
|
||||||
cachedFrpcPath = localPath
|
cachedFrpcPath = localPath
|
||||||
return localPath, nil
|
return localPath, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := embeddedFrpc.ReadFile("bin/" + fileName)
|
// 从 embed 提取到 data 目录(Windows 和 Linux 统一)
|
||||||
if err == nil {
|
dataDir := "./data"
|
||||||
tmpPath := filepath.Join(os.TempDir(), "frpc")
|
if err := os.MkdirAll(dataDir, 0755); err != nil {
|
||||||
|
return "", fmt.Errorf("创建 data 目录失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpPath := filepath.Join(dataDir, "frpc")
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
tmpPath += ".exe"
|
tmpPath += ".exe"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data, err := embeddedFrpc.ReadFile("bin/" + fileName)
|
||||||
|
if err == nil {
|
||||||
if err := os.WriteFile(tmpPath, data, 0755); err == nil {
|
if err := os.WriteFile(tmpPath, data, 0755); err == nil {
|
||||||
cachedFrpcPath = tmpPath
|
cachedFrpcPath = tmpPath
|
||||||
return tmpPath, nil
|
return tmpPath, nil
|
||||||
}
|
}
|
||||||
|
// 如果写入失败,检查文件是否已存在
|
||||||
if _, statErr := os.Stat(tmpPath); statErr == nil {
|
if _, statErr := os.Stat(tmpPath); statErr == nil {
|
||||||
cachedFrpcPath = tmpPath
|
cachedFrpcPath = tmpPath
|
||||||
return tmpPath, nil
|
return tmpPath, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 最后尝试从系统 PATH 查找
|
||||||
path, err := exec.LookPath("frpc")
|
path, err := exec.LookPath("frpc")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
cachedFrpcPath = path
|
cachedFrpcPath = path
|
||||||
|
|||||||
Reference in New Issue
Block a user