スキップしてメイン コンテンツへ

 none
Windows標準機能でのDVD書き込みでベリファイの代替機能を探しています。 RRS feed

  • 質問

  • ファイル・フォルダからDVD-Rに書き込みを実施します。

    前提として、Windows標準機能以外使用できない環境です。

    書き込み後の破損等をチェックし、問題なくDVDが作成されたことを確認する必要があります。

    Windowsの機能で実現可能であれば方法を教えてください。

    今回は使用できませんが、フリーソフトのimgBurnなどのベリファイ機能を想定しています。

    Windows標準機能の「Windowsディスクイメージ書き込みツール」で「書き込み後のディスク確認」が

    あることを確認していますが、ISOイメージファイルの作成がWindowsではできないようなので、

    今回の要件を満たせず、質問に至りました。

    よろしくお願いいたします。

    2019年7月9日 9:01

すべての返信

  • ちなみに、OSのバージョンは Windows 10 Pro 1803 です。
    2019年7月9日 9:54
  • ISOイメージファイルの作成がWindowsではできないようなので、

    回答にはなっていないのですが、参考までに。

    Windows Vista以降では「Windowsディスクイメージ書き込みツール」の実体がImage Mastering APIとして整備されています。「Windowsディスクイメージ書き込みツール」は直接ディスクに書き込んでしまいますが、APIとしてはISOイメージファイルの作成機能も存在します。ユーザーインターフェースが用意されていないだけですので、プログラム/スクリプトを記述すれば使えます。

    以下、C#言語で記述したコードになります。

    using System;
    using System.Runtime.InteropServices;
    using IMAPI2FS;     // COM reference: Microsoft IMAPI2 File System Image Creator
    using IStream = System.Runtime.InteropServices.ComTypes.IStream;
    
    class IsoImage {
        [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, PreserveSig = true)]
        static extern void SHCreateStreamOnFile(string pszFile, uint grfMode, out IStream ppstm);
    
        static void Main(string[] args) {
            var isoPath = args[0];
            var volumeName= args[1];
            var path = args[2];
            // same as Activator.CreateInstance(Type.GetTypeFromProgID("IMAPI2FS.MsftFileSystemImage"))
            var image = (IFileSystemImage)new MsftFileSystemImage();
            image.ChooseImageDefaultsForMediaType(IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DISK);
            image.FileSystemsToCreate = FsiFileSystems.FsiFileSystemJoliet | FsiFileSystems.FsiFileSystemISO9660;
            image.VolumeName = volumeName;
            image.Root.AddTree(path, false);
            var resultImage = image.CreateResultImage();
            var inStream = (IStream)resultImage.ImageStream;
            SHCreateStreamOnFile(isoPath, 0x00001001, out var outStream);
            inStream.CopyTo(outStream, (long)resultImage.TotalBlocks * resultImage.BlockSize, IntPtr.Zero, IntPtr.Zero);
            outStream.Commit(0);
        }
    }

    本当は簡単に試せるPowerShellで記述したかったんですが、IStreamが扱えなかったために断念しました。

    2019年7月9日 21:22
  • ご返信ありがとうございます。

    ご記載いただいた通り、今回の要件の解決にはなりませんでしたが、非常にためになりました。

    2019年7月10日 9:01
  • Uno__100さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    この回答には、IMAPI2 を使用して DVD を書き込み、書き込み更新をフォローアップする例が含まれます。
    ご参照いただければと思います。
    https://stackoverflow.com/questions/19856015/c-sharp-burning-dvd-vr-with-imapi2?answertab=active#tab-top

    どうぞよろしくお願いいたします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年7月12日 5:26
    モデレータ