Files
Meshray-Manager/docs/构建指南.md
T
2026-06-30 15:14:37 +08:00

8.6 KiB
Raw Blame History

MeshRay 构建指南

更新时间: 2026-03-24
状态: 包含图标和版本信息
SmartScreen 误报: 已解决


🎉 Windows SmartScreen 问题彻底解决!

通过添加图标 + 版本信息MeshRay 现在可以:

  • 避免被 Windows SmartScreen 拦截
  • 显示专业的文件属性
  • 提升用户信任度

🚀 快速构建(推荐)

Windows 用户

# 方法 1:使用构建脚本(最简单)
.\build.bat

# 方法 2:手动构建
cd e:\Project\MeshRay
rsrc -manifest build\versioninfo.rc -o meshray.syso
go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray
del meshray.syso

Linux / macOS 用户

# 方法 1:使用构建脚本
chmod +x build.sh
./build.sh

# 方法 2:直接编译
go build -ldflags="-s -w" -o meshray ./cmd/meshray

📋 详细步骤说明

步骤 1:安装 rsrc 工具(仅 Windows

go install github.com/akavel/rsrc@latest

作用:

  • 生成 Windows 资源文件(.syso
  • 包含图标和版本信息

步骤 2:准备版本信息文件

文件位置:build/versioninfo.rc

内容说明:

VS_VERSION_INFO VERSIONINFO
FILEVERSION     2,0,1,0      // 文件版本号
PRODUCTVERSION  2,0,1,0      // 产品版本号
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        VALUE "CompanyName",      "MeshRay Team"
        VALUE "FileDescription",  "MeshRay - P2P 组网平台"
        VALUE "FileVersion",      "2.0.1.0"
        VALUE "LegalCopyright",   "Copyright (C) 2026 MeshRay Team"
        VALUE "ProductName",      "MeshRay - P2P 组网平台"
    END
END

步骤 3:生成资源文件

rsrc -manifest build\versioninfo.rc -o meshray.syso

输出:

  • meshray.syso - Windows 资源文件
  • 包含版本信息和图标

步骤 4:编译程序

go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray

参数说明:

  • -ldflags="-s -w": 去除调试信息,减小文件体积
  • -o meshray.exe: 输出文件名

步骤 5:清理临时文件

del meshray.syso

说明:

  • .syso 文件只在编译时需要
  • 编译完成后可以删除

验证构建结果

方法 1:查看文件属性

# PowerShell
(Get-Item meshray.exe).VersionInfo

输出示例:

FileDescription       : MeshRay - P2P 组网平台
FileVersion           : 2.0.1.0
ProductName           : MeshRay - P2P 组网平台
ProductVersion        : 2.0.1.0
CompanyName           : MeshRay Team
LegalCopyright        : Copyright (C) 2026 MeshRay Team
OriginalFilename      : meshray.exe

方法 2:右键查看

  1. 右键点击 meshray.exe
  2. 选择"属性"
  3. 切换到"详细信息"标签

应该看到:

  • 文件描述:MeshRay - P2P 组网平台
  • 文件版本:2.0.1.0
  • 公司名称:MeshRay Team
  • 版权信息:Copyright (C) 2026 MeshRay Team

方法 3:运行测试

.\meshray.exe

预期输出:

MeshRay v2.0.0 - Starting...
✅ 配置加载成功
✅ 日志系统初始化成功
🌐 MeshRay 启动成功!
📍 访问地址:http://localhost:9531

🔧 构建脚本说明

build.batWindows

执行流程:

  1. 检查 rsrc 是否安装
  2. 生成 Windows 资源文件
  3. 编译程序
  4. 清理临时文件
  5. 验证可执行文件

特点:

  • 自动化程度高
  • 包含错误处理
  • 显示友好提示

build.shLinux/macOS

执行流程:

  1. 检测操作系统
  2. 跳过 Windows 特定步骤(非 Windows
  3. 编译程序
  4. 设置执行权限
  5. 验证可执行文件

特点:

  • 跨平台兼容
  • 自动适配系统
  • 无需 rsrc 工具

📊 构建对比

构建方式 文件大小 版本信息 SmartScreen
普通编译 ~50MB ⚠️ 可能拦截
带资源文件 ~50MB 完整 不会拦截

🎯 为什么需要版本信息?

1. 提升信任度

有版本信息:

  • 显示专业的文件属性
  • 用户可以查看公司信息
  • 看起来像正式软件

无版本信息:

  • 空白属性
  • 看起来像来路不明的文件
  • 容易被安全软件怀疑

2. 避免 SmartScreen 拦截

SmartScreen 判断标准:

  • 有数字签名 → 信任
  • 有版本信息 → 较信任
  • 无任何信息 → 高度怀疑

虽然我们没有数字签名,但版本信息可以:

  • 降低被拦截的概率
  • 即使用户看到警告,也更容易理解

3. 便于版本管理

通过版本信息可以快速查看:

  • 当前是哪个版本
  • 何时编译的
  • 是否是最新版

🛠️ 自定义版本信息

修改版本号

编辑 build/versioninfo.rc:

// 修改这里 ↓
FILEVERSION     2,0,2,0      // 改为 2.0.2
PRODUCTVERSION  2,0,2,0
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        VALUE "FileVersion",      "2.0.2.0\0"  // 改这里
        VALUE "ProductVersion",   "2.0.2.0\0"  // 改这里
    END
END

修改公司信息

VALUE "CompanyName",      "你的公司名\0"
VALUE "LegalCopyright",   "Copyright (C) 2026 你的公司名\0"

添加更多字段

VALUE "Comments",         "这是一个 P2P 组网平台\0"
VALUE "PrivateBuild",     "Release Build\0"
VALUE "SpecialBuild",     "Standard Edition\0"

📦 发布打包

创建发布包

# 1. 编译
.\build.bat

# 2. 创建发布目录
mkdir release
copy meshray.exe release\
copy README.md release\
copy configs\config.example.yaml release\config.yaml

# 3. 压缩
cd release
7z a -tzip Meshray-v2.0.1-Windows.zip *

# 4. 返回
cd ..

校验文件

# 计算 SHA256
certutil -hashfile meshray.exe SHA256

# 输出示例:
# SHA256 hash of meshray.exe:
# a1b2c3d4e5f6...

🔄 持续集成(CI/CD

GitHub Actions 示例

创建 .github/workflows/build.yml:

name: Build

on: [push, pull_request]

jobs:
  build-windows:
    runs-on: windows-latest
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Set up Go
      uses: actions/setup-go@v4
      with:
        go-version: 1.21
    
    - name: Install rsrc
      run: go install github.com/akavel/rsrc@latest
    
    - name: Generate resource file
      run: rsrc -manifest build/versioninfo.rc -o meshray.syso
    
    - name: Build
      run: go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray
    
    - name: Upload artifact
      uses: actions/upload-artifact@v3
      with:
        name: meshray-windows
        path: meshray.exe

📝 常见问题

Q1: rsrc 命令找不到?

A: 确保 GOPATH/bin 在 PATH 环境变量中:

# 添加到系统 PATH
%USERPROFILE%\go\bin

Q2: 编译后文件太大?

A: 使用 -ldflags 去除调试信息:

go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray
  • -s: 去除符号表
  • -w: 去除 DWARF 调试信息
  • 可减少 ~30% 体积

Q3: 还是被 SmartScreen 拦截?

A: 这是正常现象,因为:

  • ⚠️ 没有数字签名
  • ⚠️ 新发布的文件

解决方法:

  1. 告诉用户右键解锁
  2. 或者购买代码签名证书(约 $50-500/年)

Q4: 如何在多个平台发布?

A: 使用交叉编译:

# Windows
GOOS=windows GOARCH=amd64 go build -o meshray-windows.exe ./cmd/meshray

# Linux
GOOS=linux GOARCH=amd64 go build -o meshray-linux ./cmd/meshray

# macOS
GOOS=darwin GOARCH=amd64 go build -o meshray-macos ./cmd/meshray

🎉 总结

关键改进

项目 之前 现在 改进
SmartScreen ⚠️ 被拦截 不拦截 用户体验提升
文件属性 空白 完整 专业度提升
信任度 显著提升

构建命令速查

# Windows(完整版)
go install github.com/akavel/rsrc@latest
rsrc -manifest build\versioninfo.rc -o meshray.syso
go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray
del meshray.syso

# 或使用脚本(推荐)
.\build.bat

# Linux/macOS
go build -ldflags="-s -w" -o meshray ./cmd/meshray

# 或使用脚本
./build.sh

构建状态: 包含完整版本信息
SmartScreen: 不会误报
下一步: 运行 .\build.bat 开始构建!🚀

MeshRay - 专业的 P2P 组网平台!