如何用Python实现Windows系统中ISO挂载DVD驱动器的弹出功能?
实现Windows 10下弹出ISO挂载驱动器的思路
要实现eject_iso函数,核心是先定位到ISO文件对应的虚拟DVD驱动器,再执行弹出操作。以下分两种场景给出具体实现方案:
一、优先基于ISO文件名实现
Windows挂载ISO后,虚拟驱动器的ProviderName属性会指向对应的ISO文件路径。我们可以通过WMI接口查询系统中所有CDROM类型的逻辑磁盘,匹配ISO文件名后执行弹出:
步骤与代码
- 先安装依赖:
pip install pywin32 - 实现函数:
import win32com.client import os def eject_iso(iso_name): # 统一文件名格式,确保带.iso后缀 if not iso_name.endswith('.iso'): iso_name += '.iso' # 连接Windows WMI服务 wmi = win32com.client.GetObject("winmgmts:") # 遍历所有CDROM类型的逻辑磁盘 for disk in wmi.InstancesOf("Win32_LogicalDisk"): if disk.DriveType == 5: # DriveType=5代表CDROM驱动器 if disk.ProviderName: # 该属性为挂载的ISO文件路径 mounted_iso_filename = os.path.basename(disk.ProviderName) # 不区分大小写匹配文件名 if mounted_iso_filename.lower() == iso_name.lower(): drive_letter = disk.DeviceID # 找到对应驱动器并执行弹出 for cd_drive in wmi.InstancesOf("Win32_CDROMDrive"): if cd_drive.Drive == drive_letter: try: cd_drive.EjectMedia() print(f"已成功弹出ISO文件 [{iso_name}] 对应的驱动器 {drive_letter}") return except Exception as e: print(f"弹出失败:{str(e)}") return print(f"未找到已挂载的ISO文件 [{iso_name}]")
二、基于驱动器号实现
如果已知虚拟驱动器的盘符(如D:),可以直接定位驱动器执行弹出,逻辑更简洁:
代码实现
import win32com.client def eject_iso(drive_letter=None, iso_name=None): # 优先处理ISO文件名匹配逻辑 if iso_name: if not iso_name.endswith('.iso'): iso_name += '.iso' wmi = win32com.client.GetObject("winmgmts:") for disk in wmi.InstancesOf("Win32_LogicalDisk"): if disk.DriveType == 5 and disk.ProviderName: mounted_iso = os.path.basename(disk.ProviderName) if mounted_iso.lower() == iso_name.lower(): drive_letter = disk.DeviceID break else: print(f"未找到已挂载的ISO文件 [{iso_name}]") return # 处理驱动器号弹出逻辑 if drive_letter: # 统一盘符格式,确保带冒号 if not drive_letter.endswith(':'): drive_letter += ':' wmi = win32com.client.GetObject("winmgmts:") for cd_drive in wmi.InstancesOf("Win32_CDROMDrive"): if cd_drive.Drive == drive_letter: try: cd_drive.EjectMedia() print(f"已成功弹出驱动器 {drive_letter}") return except Exception as e: print(f"弹出失败:{str(e)}") return print(f"未找到驱动器 {drive_letter}")
补充说明
- 权限要求:执行该函数需要具备系统级权限,否则可能弹出失败
- 兼容性:仅适用于Windows 10及以上系统(原生支持ISO挂载)
- 异常处理:如果同一个ISO被重复挂载(Win10默认不允许),需要额外处理多驱动器匹配的情况
内容的提问来源于stack exchange,提问作者Agent859
相关产品推荐
相关产品推荐

