IMAPI: COMException Произошла внутренняя ошибка файловой системы [-1062555360 ]
Я пишу CD/DVD, используя IMAPI с приложением C#.NET Windows. Данные, которые я записываю на CD, содержат один исполняемый файл (test.exe), который также разработан на C#.NET и виртуализирован (sandobx) с использованием Turbo Virtualization Studio. Все данные, которые будут записаны на CD, помещаются в одну папку (исходный путь) на диске C.
Ниже приведен небольшой фрагмент кода:
IStream stream = null;
try
{
System.Diagnostics.Debug.Print("Adding - " + thisFileItem.SourcePath);
if (thisFileItem.SourcePath != null)
Win32.SHCreateStreamOnFile(thisFileItem.SourcePath, Win32.STGM_READ | Win32.STGM_SHARE_DENY_WRITE, ref stream);
if (stream != null)
{
fileSystemImage.Root.AddFile(thisFileItem.DestPath + thisFileItem.DisplayName, stream);
}
}
finally
{
if (stream != null)
{
Marshal.FinalReleaseComObject(stream);
}
}
Вызов метода "fileSystemImage.Root.AddFile" при добавлении test.exe создает COMException -1062555360 "Произошла внутренняя ошибка файловой системы". Все остальные файлы добавляются и пишутся правильно.
Сведения об исключении: -
COMException -1062555360
Internal file system error occurred.
at ImapiInterop.IFsiDirectoryItem.AddFile(String path, IStream fileData)
at ImapiImplementation.CDWriter.objBackgroundWorker_DoWork(Object sender, DoWorkEventArgs e) in C:\.........\CDWriter.cs:line 405
Если я помещаю исходную папку в другое место (на рабочий стол или диск D), весь процесс записи (включая test.exe) происходит без ошибок.
Я подозреваю, что проблема связана с вирулизацией, но не уверен. Пожалуйста помоги.
1 ответ
Сообщение об ошибке, возвращаемое IMAPI, неверно, и поэтому все путаницы. Обратитесь по следующей ссылке.
Ниже приведен текст, скопированный из ответа (от Дмитрия) на вышеуказанном сайте:
IMAPI поддерживает интерфейс ISupportErrorInfo, и мы знаем о проблеме несовпадения сообщений об ошибках в вашем сценарии.
Внутренне IMAPI создает объекты отката для отмены добавления / удаления файловых действий. У нас была проблема, когда действие отката было создано преждевременно, поэтому после того, как код возврата для IFsiDirectoryItem::AddFile уже был установлен, действие отката состояло в том, чтобы удалить файл из изображения. Поскольку файл не был добавлен, было сгенерировано исключение IMAPI_E_FSI_INTERNAL_ERROR, которое изменило сообщение IErrorInfo на сообщение, которое вы видите.
Мы знаем об этой проблеме, и она будет исправлена в следующей версии IMAPI. К сожалению, это недостаточно серьезно для исправления.