You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现Windows系统中ISO挂载DVD驱动器的弹出功能?

实现Windows 10下弹出ISO挂载驱动器的思路

要实现eject_iso函数,核心是先定位到ISO文件对应的虚拟DVD驱动器,再执行弹出操作。以下分两种场景给出具体实现方案:

一、优先基于ISO文件名实现

Windows挂载ISO后,虚拟驱动器的ProviderName属性会指向对应的ISO文件路径。我们可以通过WMI接口查询系统中所有CDROM类型的逻辑磁盘,匹配ISO文件名后执行弹出:

步骤与代码

  1. 先安装依赖:pip install pywin32
  2. 实现函数:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:33:28