2026-04-28 16:22:39 +08:00
|
|
|
|
use winresource::VersionInfo;
|
|
|
|
|
|
|
|
|
|
|
|
extern crate winresource;
|
2026-04-07 13:21:31 +08:00
|
|
|
|
|
|
|
|
|
|
fn main() {
|
2026-05-07 10:13:52 +08:00
|
|
|
|
let version_str = "1.0.0.5";
|
2026-05-06 15:29:36 +08:00
|
|
|
|
|
2026-04-28 16:22:39 +08:00
|
|
|
|
let mut res = winresource::WindowsResource::new();
|
|
|
|
|
|
// 字符串表(文件属性对话框显示的值)
|
2026-05-06 15:29:36 +08:00
|
|
|
|
res.set("FileVersion", version_str);
|
|
|
|
|
|
res.set("ProductVersion", version_str);
|
|
|
|
|
|
|
|
|
|
|
|
// 从字符串自动解析版本号到二进制结构
|
|
|
|
|
|
let mut parts = version_str.split('.');
|
|
|
|
|
|
let major: u64 = parts.next().and_then(|s| s.parse().ok()).unwrap_or(0);
|
|
|
|
|
|
let minor: u64 = parts.next().and_then(|s| s.parse().ok()).unwrap_or(0);
|
|
|
|
|
|
let patch: u64 = parts.next().and_then(|s| s.parse().ok()).unwrap_or(0);
|
|
|
|
|
|
let pre: u64 = parts.next().and_then(|s| s.parse().ok()).unwrap_or(0);
|
|
|
|
|
|
|
2026-04-28 16:22:39 +08:00
|
|
|
|
// 二进制结构(VERSIONINFO 的 FILEVERSION / PRODUCTVERSION)
|
|
|
|
|
|
// 格式: Major<<48 | Minor<<32 | Patch<<16 | Pre
|
2026-05-06 15:29:36 +08:00
|
|
|
|
let ver: u64 = (major << 48) | (minor << 32) | (patch << 16) | pre;
|
2026-04-28 16:22:39 +08:00
|
|
|
|
res.set_version_info(VersionInfo::FILEVERSION, ver);
|
|
|
|
|
|
res.set_version_info(VersionInfo::PRODUCTVERSION, ver);
|
2026-04-07 13:21:31 +08:00
|
|
|
|
res.compile().unwrap();
|
|
|
|
|
|
}
|