项目中有多光驱刻录的需求,但在一个进程里同时启动多个刻录任务,进程经常报异常,于是把刻录部分单独做了个控制台程序,每个光驱刻录就启动一个进程去执行刻录任务,这样就算刻录进程出错也不会影响到父进程。
以下是Nero 刻碟的类,SDK采用NeroSDK-1.08版本,调用NeroCOM组件。调用时必须引用Interop.NEROLib.dll 和 Interop.NeroVisionAPI.dll 两个dll。
public class NeroBurn
{
#region 属性
private NeroDrive m_neroDerive;
private Nero m_nero;
private bool m_aborted;
private string m_burnPath;
private bool m_isDoneBurn;
private int m_returnCode;//0:失败;1:成功;-1:未知
private string m_discvol;
//nero 委托
private _INeroDriveEvents_OnDoneBurnEventHandler m_evOnDoneBurn;
private _INeroDriveEvents_OnAddLogLineEventHandler m_evOnAddLogLine;
private _INeroEvents_OnWaitCDEventHandler m_evOnWaitCD;
private _INeroDriveEvents_OnAbortedEventHandler m_evOnAborted;
private _INeroDriveEvents_OnProgressEventHandler m_evOnProgress;
private _INeroEvents_OnWaitCDDoneEventHandler m_evOnWaitCDDone;
#endregion
#region 构造函数
///
/// 构造函数
///
/// 盘符
/// 待刻录的文件路径
/// 盘的卷标
public NeroBurn(string driverletter,string burnpath,string discvol)
{
m_burnPath = burnpath;
m_nero = new NeroClass();
m_neroDerive = allocDevice(driverletter);
m_aborted = false;
m_isDoneBurn = false;
m_discvol = discvol;
}
#endregion
#region Nero事件处理
///
/// 发起刻录事件
///
///
private void SubscribeToEvents(bool bSubscribe)
{
if (bSubscribe)
{
m_evOnAddLogLine = new _INeroDriveEvents_OnAddLogLineEventHandler(m_drive_OnAddLogLine);
m_neroDerive.OnAddLogLine += m_evOnAddLogLine;
m_evOnWaitCD = new _INeroEvents_OnWaitCDEventHandler(m_nero_OnWaitCD);
m_nero.OnWaitCD += m_evOnWaitCD;
m_evOnDoneBurn = new _INeroDriveEvents_OnDoneBurnEventHandler(m_drive_OnDoneBurn);
m_neroDerive.OnDoneBurn += m_evOnDoneBurn;
m_evOnWaitCDDone = new _INeroEvents_OnWaitCDDoneEventHandler(m_nero_OnWaitCDDone);
m_nero.OnWaitCD