Skip to content

InstallInfo

已安装组件(MSVC 或 SDK)的信息。

定义

rust
pub struct InstallInfo {
    /// 组件类型:"msvc" 或 "sdk"
    pub component_type: String,
    
    /// 已安装版本
    pub version: String,
    
    /// 安装路径
    pub install_path: PathBuf,
    
    /// 已下载文件列表
    pub downloaded_files: Vec<PathBuf>,
    
    /// 目标架构
    pub arch: Architecture,
}

方法

验证

rust
/// 检查安装是否有效(路径存在)
pub fn is_valid(&self) -> bool;

/// 获取已下载文件的总大小
pub fn total_size(&self) -> u64;

路径访问器

rust
/// 获取此组件的 bin 目录
pub fn bin_dir(&self) -> PathBuf;

/// 获取此组件的 include 目录
pub fn include_dir(&self) -> PathBuf;

/// 获取此组件的 lib 目录
pub fn lib_dir(&self) -> PathBuf;

导出

rust
/// 导出安装信息为 JSON
pub fn to_json(&self) -> serde_json::Value;

使用示例

基本用法

rust
use msvc_kit::{download_msvc, DownloadOptions};

let options = DownloadOptions::default();
let info = download_msvc(&options).await?;

println!("组件: {}", info.component_type);  // "msvc"
println!("版本: {}", info.version);         // "14.44.34823"
println!("路径: {:?}", info.install_path);
println!("有效: {}", info.is_valid());
println!("大小: {} 字节", info.total_size());

访问目录

rust
let info = download_msvc(&options).await?;

// 获取特定目录
let bin = info.bin_dir();          // .../bin/Hostx64/x64
let include = info.include_dir();  // .../include
let lib = info.lib_dir();          // .../lib/x64

println!("cl.exe 应该在: {:?}", bin.join("cl.exe"));

导出为 JSON

rust
let info = download_msvc(&options).await?;
let json = info.to_json();

println!("{}", serde_json::to_string_pretty(&json)?);

输出:

json
{
  "component_type": "msvc",
  "version": "14.44.34823",
  "install_path": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823",
  "bin_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\bin\\Hostx64\\x64",
  "include_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\include",
  "lib_dir": "C:\\msvc-kit\\VC\\Tools\\MSVC\\14.44.34823\\lib\\x64",
  "arch": "x64",
  "is_valid": true,
  "total_size": 1234567890
}

MSVC 与 SDK 路径

MSVC 和 SDK 的路径结构不同:

MSVC:

install_path: VC/Tools/MSVC/14.xx.xxxxx/
bin_dir:      VC/Tools/MSVC/14.xx.xxxxx/bin/Hostx64/x64/
include_dir:  VC/Tools/MSVC/14.xx.xxxxx/include/
lib_dir:      VC/Tools/MSVC/14.xx.xxxxx/lib/x64/

SDK:

install_path: Windows Kits/10/
bin_dir:      Windows Kits/10/bin/10.0.xxxxx.0/x64/
include_dir:  Windows Kits/10/Include/10.0.xxxxx.0/
lib_dir:      Windows Kits/10/Lib/10.0.xxxxx.0/um/x64/

序列化

InstallInfo 实现了 SerializeDeserialize

rust
use serde_json;

let info = download_msvc(&options).await?;

// 序列化
let json = serde_json::to_string(&info)?;

// 反序列化
let restored: InstallInfo = serde_json::from_str(&json)?;

Released under the MIT License.