Продублировал на Олексия Попова, срочно нужна помощь !
Добрый день, ГОРИМ С НОВОЙ ПРОБЛЕМОЙ !
У нас возникает новая проблема с дозаписью на мультисессионные диски.
Проблема заключается в том, что при достижении некоторого объема данных на DVD
(по предварительным данным, 1 Гб) метод ImportTrack выдает ошибку.
Сталкивались Вы с такой ошибкой ? Если да, то как решить проблему ?
Если нет, тогда нам в любом случае нужна обновленная версия библиотеки (с подавлением окна "купи меня"), которую мы могли бы проверить на наличие/остутствие данного дефекта.
Дополнительная информация:
Носители TDK DVD+RW 4X, мы используем StarBurn_ocx_060423, драйвер Staropen.sys, под Windows Server 2003 (DVD-привод находится на локальном диске сервера)
(с подавлением выдачи сообщений окна "Купи меня" - кастомным изменением, о котором мы просили, так как запись осуществляется на сервере приложений)
Детальное сообщение об ошибке:
Сообщение: Выгрузка пачек завершена неудачно Ошибка записи на внешний носитель во время выполнения операции! Проверьте наличие диска в приводе. В случае необходимости обратитесь к администратору Выгрузка пачек прервана, диск может быть испорчен. Замените носитель и повторите операцию при необходимости Параметры операции выгрузки: Идентификатор носителя: 5_T56 Сетевой ресурс: \\srv1\Packs\ Внешний ресурс: e:\ Архивный ресурс: \\srv1\Archive\5_T56\ Выгрузка на жесткий диск: нет Идентификатор сессии: buxvyt55saxiyiius4q045ai Идентификатор операции выгрузки: 36f63c2a-2a89-4c9f-af16-458a629b76f2 Количество пачек: 1 Ошибка при записи диска из образа Исключение: Параметр задан неверно. Описание: Источник: Croc.VSHP2006.Commands Стек: at Croc.VSHP2006.Commands.AppliedLogic.StarBurner.Burn(String sVolumeSetName, String sAppName) at Croc.VSHP2006.Commands.ExportPacksCommand.Execute(XRequest request, IXExecutionContext context) /-------------- Вложенное исключение ---------------/ Сообщение: Параметр задан неверно. Источник: Interop.StarBurn Стек: at StarBurn.CDeviceClass.ImportTrack(Object pJolietImage, Boolean bImportJolietFS, UInt16 TrackNumber) at Croc.VSHP2006.Commands.AppliedLogic.StarBurner.Burn(String sVolumeSetName, String sAppName)
Код, вызывающий исключение: (файлы вложены аттачментами)
Метод Burn:
/// <summary>
/// Записывает образ диска
/// </summary>
/// <param name="sVolumeSetName">Имя тома</param>
/// <param name="sAppName">Имя приложения</param>
public void Burn(string sVolumeSetName, string sAppName)
{
try
{
UnitReady();
// Получаем информацию о диске
CDiscInfo discInfo = m_device.GetDiscInfo();
// Получаем следующий свободный для записи блок
uint nStartingLBA = 0;
nStartingLBA = (uint)discInfo.NextWritableAddress;
// Мультисессия - импортируем предыдущие треки
if ((discInfo.IsBlank == false) && (discInfo.TrackNumber > 1))
{
// Импортируем последнюю дорожку
m_device.ImportTrack(m_image, true, (ushort)(discInfo.TrackNumber - 1)); // <- исключение возникает здесь
}
// Компилируем образ
m_image.Build(nStartingLBA, sVolumeSetName, sAppName);
UnitReady();
m_device.SetSpeeds(0xFFFF, 0xFFFF); // У нас максимум 4x болванки
bool BUPSupported=false;
bool BUPEnabled =false;
// Проверяем поддержку BUP (Buffer Underrun Protection)
m_device.GetBUP(out BUPEnabled,out BUPSupported);
if (BUPSupported && !BUPEnabled)
{
m_device.SetBUP(true);
}
// Устанавливаем OPC (optimum power calibration)
m_device.SendOPC();
// Производим запись (из образа, не тестовую, разрешаем записывать новую сессию за записываемой)
m_device.TrackAtOnceFromFileSystemHandle((int)m_image.FileSystemHandle, false, true);
}
catch(Exception ex)
{
string sMsg = string.Format("Ошибка при записи диска из образа \nИсключение: {0}\n" +
"Описание: {1}", ex.Message, m_image.ErrorMessage);
throw new ApplicationException(sMsg, ex);
}
}
|