System.AccessViolationException при записи данных на DVD-диск с существующими данными - PullRequest
0 голосов
/ 27 ноября 2018

После попытки записи данных на DVD-диск с существующими данными Visual Studio генерирует исключение System.AccessViolationException.Я использую это, чтобы написать на нем: https://www.codeproject.com/Articles/24544/Burning-and-Erasing-CD-DVD-Blu-ray-Media-with-C-an, однако после перехода на Windows 10, похоже, он больше не работает.В чем может быть причина проблемы?NB: с CD и после полного стирания данных на DVD все работает нормально.Извините за плохой английский.

 private bool _CreateMediaFileSystem(IMAPI2.Interop.IDiscRecorder2 discRecorder
                                         , Object[] multisessionInterfaces
                                         , ref System.Runtime.InteropServices.ComTypes.IStream dataStream
                                         , String driveLetter
                                         , List<KeyValuePair<String, String>> directoryList)
    {
        IMAPI2.Interop.MsftFileSystemImage fileSystemImage = null;
        try {
            fileSystemImage = (IMAPI2.Interop.MsftFileSystemImage)new IMAPI2.Interop.MsftFileSystemImageClass();
            fileSystemImage.ChooseImageDefaults(discRecorder);
            fileSystemImage.FileSystemsToCreate = IMAPI2.Interop.FsiFileSystems.FsiFileSystemJoliet | IMAPI2.Interop.FsiFileSystems.FsiFileSystemISO9660;
            fileSystemImage.VolumeName = "ISIX_" + DateTime.Now.ToString("yyyyMMdd");

            if (multisessionInterfaces != null) { // If multisessions, then import previous sessions
                fileSystemImage.MultisessionInterfaces = multisessionInterfaces;
                fileSystemImage.ImportFileSystem();
            }

            if (directoryList.Count <= 0) {
                BLLogFilesSvc.GetInstance().WriteLogDicomDebugFile("CreateMediaFileSystem failed because no directory to insert is present.");
                return false;
            }

            foreach (KeyValuePair<String, String> directoryItem in directoryList) {
                if (directoryItem.Value == "") {
                    fileSystemImage.Root.AddTree(directoryItem.Key, false);
                }
                else {
                    IMAPI2.Interop.IFsiDirectoryItem iFsiDirectoryItem = fileSystemImage.CreateDirectoryItem(directoryItem.Value);
                    fileSystemImage.Root.Add((IMAPI2.Interop.IFsiItem)iFsiDirectoryItem);
                    iFsiDirectoryItem.AddTree(directoryItem.Key, false);
                }
            }

            dataStream = fileSystemImage.CreateResultImage().ImageStream;
        }
        catch (System.Runtime.InteropServices.COMException ex) {
            BLLogFilesSvc.GetInstance().WriteLogDicomDebugFile("COMEXception thrown in _CreateMediaFileSystem(): " + ex.Message);
            return false;
        }
        finally {
            if (fileSystemImage != null) {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(fileSystemImage);
            }
        }
        return true;

Кажется, что линия преступника такова:

dataStream = fileSystemImage.CreateResultImage().ImageStream;
...