IMAPI2 如何刻录已经创建的iso

Posted

技术标签:

【中文标题】IMAPI2 如何刻录已经创建的iso【英文标题】:IMAPI2 How to burn an already created iso 【发布时间】:2012-01-21 22:44:25 【问题描述】:

我已经阅读了 hackchina 和 codeproject 的示例,但我似乎无法弄清楚如何刻录现有的 .iso 文件。上面的示例显示了从文件夹制作 .iso 然后刻录它的方法。我希望能够直接刻录iso文件。

这是一些代码:

IDiscRecorder2 discRecorder = new MsftDiscRecorder2();
string Burner = comboBox1.SelectedItem.ToString();

foreach (DrvProperties prop in drv_props)

  if (prop.letter.Contains(Burner)) // letter contains the drive's Letter (E:, G: etc.)
  
    discRecorder.InitializeDiscRecorder(prop.ID); // ID contains drive's uniqueID
  



IDiscFormat2Data discFormatData = new MsftDiscFormat2Data();
discFormatData.Recorder = discRecorder;

IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
......
......

有人可以帮我更进一步吗?假设我有example.iso。我现在该怎么办?我不明白。 (我在 CodeProject 示例的代码中使用了 IMAPI2.interop)。

非常感谢

【问题讨论】:

请教我如何在 MsftFileSystemImage 对象中添加 .iso 文件,我该怎么办? 【参考方案1】:

我终于想通了,首先你需要包含以下命名空间:

using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

为了能够使用IStream。

然后您需要从 shlwapi.dll 导入 SHCreateStreamOnFIle 以打开该 iso 的“读取流”:

private const uint STGM_SHARE_DENY_WRITE = 0x00000020;
    private const uint STGM_SHARE_DENY_NONE = 0x00000040;
    private const uint STGM_READ = 0x00000000;
    private const uint STGM_WRITE = 0x00000001;
    private const uint STGM_READWRITE = 0x00000002;

     [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true,    PreserveSig = false, EntryPoint = "SHCreateStreamOnFileW")]
    static extern void SHCreateStreamOnFile(string fileName, uint mode, ref IStream stream);

IStream stream = null;
SHCreateStreamOnFile(path2iso, STGM_READ | STGM_SHARE_DENY_WRITE, ref stream);

最后将 i 提供给 discFormatData.Write() 方法。

discFormatData.Write(stream);

我希望它对某人有所帮助。保重

【讨论】:

以上是关于IMAPI2 如何刻录已经创建的iso的主要内容,如果未能解决你的问题,请参考以下文章

IMAPI2 可以刻录大于 4Gb 的文件吗?

.NET 中的 IMAPI2 MsftFileSystemImage 在创建 ISO 时未释放文件

Windows XP 上的 IMAPI2 错误

使用 PowerShell 创建 ISO 映像:如何将 IStream 保存到文件?

如何在Mac上将视频刻录到DVD / ISO文件

在磁盘中创建一个文件夹并使用 IMAPI 2 刻录到它