C#Disc弹出随机失败,表示会话必须关闭(甚至不刻录光盘)

时间:2015-09-25 19:59:29

标签: c# file-copying removable-storage

我的用户最近遇到了一个恼人的问题。

我有一个基本上从cd,dvd或usb驱动器获取图像的应用程序,并将它们复制到网络中。

完成复制后,应自动弹出光盘。

问题是,当光盘被复制并进行弹出时,需要很长时间。我的一位用户说她等了一个小时才完成关闭并弹出。

在发生这种情况的其他光盘上,用户会尝试按下物理弹出按钮,弹出Windows 7上的气泡,并说等到会话结束后再弹出。

没有任何东西被刻录到光盘而光盘不是CD-RW或DVD-RW,所以我不明白它为什么需要关闭光盘上的会话。

最初刻录CD的人有可能搞砸了吗?

在今天到目前为止已经完成的250多张光盘中,这只发生在其中两张光盘上,这让我相信这些光盘有问题。

这是我弹出驱动器的方法:

    private void Eject()
    {
        try
        {
            VolumeDeviceClass volumeDeviceClass = new VolumeDeviceClass();

            foreach (Volume device in volumeDeviceClass.Devices)
            {
                if (!device.IsUsb)
                    continue;

                if (device.LogicalDrive == null || (device.LogicalDrive.Length == 0))
                    continue;

                /* Should get down here if our device is a usb drive */
                device.Eject(true);
            }

            var sb = new StringBuilder();

            mciSendString("open " + _driveName.Substring(0, 2) + " type cdaudio alias cddrive", sb, 127, IntPtr.Zero);
            mciSendString("set cddrive door open", sb, 127, IntPtr.Zero);
        }
        catch (Exception ex)
        {
            ex.Log(ex.Message, Logger.Severity.Error, "Error ejecting CD drive: " + Environment.MachineName);
        }
    }

0 个答案:

没有答案