Files
Lannamokia_vhdmount/VHD_Mount_Fix_Guide.md
Lannamokia ffdacb897a fix(VHD挂载): 改进VHD挂载的盘符分配逻辑和错误处理
重写VHD挂载流程,新增盘符冲突处理机制
- 新增RemoveExistingDriveLetter方法处理已有盘符
- 改进AssignDriveLetterToFirstPartition的错误处理
- 添加详细的调试日志和状态输出
- 优化diskpart脚本执行流程和超时处理
2025-10-20 04:01:19 +08:00

3.8 KiB
Raw Permalink Blame History

VHD挂载修复测试指南

修复内容

本次修复解决了以下VHD挂载相关问题:

  1. VHD解除挂载后程序卡住问题

    • 重写了MountVHD方法,采用两步式挂载流程
    • 先挂载VHD文件,再为第一个分区分配盘符M
    • 添加了完善的错误处理和超时机制
  2. VHD挂载盘符处理兼容性问题

    • 新增AssignDriveLetterToFirstPartition()方法,专门处理分区盘符分配
    • 新增AssignDriveLetterDirect()备用方法,提供兼容性支持
    • 改进了diskpart脚本的执行和错误处理
  3. 智能盘符重新分配机制

    • 新增RemoveExistingDriveLetter()方法,用于删除已有盘符
    • 当检测到M盘已存在时,先删除原有盘符,再重新分配
    • 确保盘符分配的一致性和可靠性,避免冲突

测试步骤

准备工作

  1. 确保有管理员权限(VHD挂载需要管理员权限)
  2. 准备测试用的VHD文件
  3. 确保M盘符当前未被占用

测试1:本地VHD挂载测试

  1. 将VHD文件放在本地目录
  2. 运行程序,选择本地VHD文件
  3. 观察挂载过程的状态输出
  4. 验证M盘是否成功挂载并可访问

测试2USB VHD替换测试

  1. 准备包含VHD文件的USB设备
  2. 插入USB设备
  3. 运行程序,让其自动检测并替换本地VHD
  4. 验证替换和挂载过程是否正常

测试3:盘符冲突处理测试

  1. 手动创建一个M盘(可以是网络驱动器或其他)
  2. 运行程序挂载VHD
  3. 验证程序是否正确删除原有M盘并重新分配

测试4:多分区VHD兼容性测试

  1. 使用包含多个分区的VHD文件
  2. 验证程序是否正确为第一个分区分配M盘符
  3. 检查其他分区是否不受影响

预期输出示例

正常挂载流程

开始挂载VHD: C:\path\to\file.vhd
步骤1: 挂载VHD文件...
VHD挂载成功,等待系统识别分区...
步骤2: 为第一个分区分配盘符M...
正在为第一个分区分配盘符M...
盘符M分配成功
VHD挂载和盘符分配完成

盘符冲突处理流程

开始挂载VHD: C:\path\to\file.vhd
步骤1: 挂载VHD文件...
VHD挂载成功,等待系统识别分区...
步骤2: 为第一个分区分配盘符M...
检测到M盘已存在,正在删除原有盘符...
正在删除VHD第一个分区的现有盘符...
盘符M删除成功
原有盘符删除成功
正在为第一个分区分配盘符M...
盘符M分配成功
VHD挂载和盘符分配完成

备用方法触发

分配盘符失败,尝试备用方法...
尝试备用盘符分配方法...
备用方法:盘符M分配成功
VHD挂载和盘符分配完成

故障排除

常见问题

  1. 权限不足:确保以管理员身份运行程序
  2. VHD文件损坏:检查VHD文件是否完整
  3. 盘符冲突:程序会自动处理M盘冲突,删除原有盘符后重新分配
  4. 系统资源不足:确保有足够的内存和磁盘空间

调试信息

程序会在Debug输出中显示详细的操作信息,包括:

  • diskpart命令的执行结果
  • 盘符分配的详细过程
  • 错误信息和异常堆栈

注意事项

  1. 管理员权限VHD挂载操作需要管理员权限
  2. 盘符占用:程序会自动处理M盘冲突,无需手动干预
  3. 系统兼容性:支持Windows 10/11系统
  4. VHD格式:支持标准的VHD和VHDX格式文件
  5. 安全性:程序会在操作完成后自动清理临时文件

技术细节

盘符重新分配流程

  1. 检测M盘是否已存在
  2. 如果存在,使用diskpart删除原有盘符
  3. 等待系统更新(2秒延迟)
  4. 重新为VHD第一个分区分配M盘符
  5. 验证分配结果

容错机制

  • 删除盘符失败时,程序仍会尝试重新分配
  • 主要分配方法失败时,自动尝试备用方法
  • 所有操作都有超时保护,避免程序卡死