C# Извлечение диска случайно завершается неудачно, говоря, что сеанс должен быть закрыт (даже не записывая диск)

У моих пользователей в последнее время возникла досадная проблема.

У меня есть приложение, которое в основном берет изображения с дисков CD, DVD или USB и копирует их в сеть.

После завершения копирования он должен автоматически извлечь диск.

Проблема в том, что когда диск готов к копированию и извлекается, это занимает очень много времени. Одна из моих пользователей сказала, что она ждала час, чтобы он закрылся и извлекся.

На других дисках, где это произошло, пользователь будет пытаться нажать физическую кнопку извлечения, и всплывающее окно в Windows 7 выдает сообщение "Пожалуйста, подождите, пока сеанс не будет закрыт перед извлечением".

На диск ничего не записывается, и диск не является CD-RW или DVD-RW, поэтому я не понимаю, почему он должен закрывать сеанс на диске.

Возможно ли, что человек, который изначально сжег компакт-диск, как-то испортился?

Из 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 ответов

Другие вопросы по тегам