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, неверно, и поэтому все путаницы. Обратитесь по следующей ссылке.

social.msdn.microsoft.com

Ниже приведен текст, скопированный из ответа (от Дмитрия) на вышеуказанном сайте:

IMAPI поддерживает интерфейс ISupportErrorInfo, и мы знаем о проблеме несовпадения сообщений об ошибках в вашем сценарии.

Внутренне IMAPI создает объекты отката для отмены добавления / удаления файловых действий. У нас была проблема, когда действие отката было создано преждевременно, поэтому после того, как код возврата для IFsiDirectoryItem::AddFile уже был установлен, действие отката состояло в том, чтобы удалить файл из изображения. Поскольку файл не был добавлен, было сгенерировано исключение IMAPI_E_FSI_INTERNAL_ERROR, которое изменило сообщение IErrorInfo на сообщение, которое вы видите.

Мы знаем об этой проблеме, и она будет исправлена ​​в следующей версии IMAPI. К сожалению, это недостаточно серьезно для исправления.

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