C#: CD/DVD írás az XPBurn-el.., nem jó élmény…

CD/DVD írás C# programunkból az XPBurn könyvtárral…rögtön a blogbejegyzés elején szeretném leszögezni: ha teheted, akkor ne használd az XPBurn-t, mert Windows 7 alatt nem működik, és DVD-t sem nagyon lehet vele írni. 🙂

Alap információk:

Az XPBurn könyvtárat, vagy komponenst a Microsoft készítette, a Windows XP-től újabb operációs rendszerek alatt teszi lehetővé a CD/DVD írást saját programunkból, erről az URL-ről lehet letölteni:

http://msdn.microsoft.com/en-au/vcsharp/aa336741.aspx

Letöltés és telepítés után a saját dokumentumaink közt az MSDN mappába települ, innen tudjuk hozzáadni a projektünkhöz (Projekt->Add Reference->Browse). Megkapjuk a forráskódot is, melyet kedvünkre vizsgálgathatunk, de van hozzá súgó is, ez is használható, bár nem túl segítőkész.

Keresgélés közben találtam Delphi-hez készült véltozatot is, ha valaki ezt keresné, akkor innen letöltheti: http://www.bayden.com/delphi/xpburn.htm vagy innen: http://www.fiddler2.com/delphi/cdburner.htm

A használata. Ha sikerült hozzáadnunk a referenciát a projektünkhöz, akkor először is be kell töltenünk az XPBurn névteret:

 using XPBurn;  

Ezek után (elvileg) használhatjuk az XPBurn-t, de mielőtt elkezdenénk optikai lemezeket írni :-), egy kis öko-duma: természetvédelmi és ökológiai szempontokból szerintem minél inkább kerülni kellene ezeknek a több ezer év alatt lebomló vackoknak a használatát…elnézést, de ez tényleg így van), szóval mielőtt “égetnénk”, nézzük meg, hogy milyen információkat tudunk lekérdezni az XPBurn segítségével.

 private void button1_Click(object sender, EventArgs e)  
{
XPBurn.XPBurnCD OptDriverBurner = new XPBurn.XPBurnCD();
MessageBox.Show(OptDriverBurner.BurnerDrive); //az aktuális író egység
MessageBox.Show(OptDriverBurner.MaxWriteSpeed.ToString()); //maximális írási sebesség
MessageBox.Show(OptDriverBurner.ProductID); //termék azonosító
//ha több egység is van, akkor így kérdezhetőek le
foreach (string driverName in OptDriverBurner.RecorderDrives)
{
MessageBox.Show(driverName);
}
}

Körülbelül ennyi infót tudunk összegyűjteni, ezek után próbáljunk meg néhány fájlt küldeni az író egység felé. 🙂

     private void button1_Click(object sender, EventArgs e)  
{
this.openFileDialog1.Multiselect = true;
this.openFileDialog1.Title = "Az íráshoz kiválasztás";
this.openFileDialog1.FileName = "";
DialogResult dlgResult = this.openFileDialog1.ShowDialog();
string cdFileName = ""; //a CD-n ez lesz a fájlunk neve
if (dlgResult == DialogResult.OK)
{
try
{
XPBurn.XPBurnCD OptDriverBurner = new XPBurn.XPBurnCD();
OptDriverBurner.BurnComplete += new NotifyCompletionStatus( BurnComplete);
foreach (String file in openFileDialog1.FileNames)
{
cdFileName = System.IO.Path.GetFileName(@file); //fájl nevének kinyerése
OptDriverBurner.AddFile(file, cdFileName);
}
OptDriverBurner.RecordDisc(false, true);
}
catch ( XPBurnException xpbexc)
{
MessageBox.Show( xpbexc.ToString());
}
}
}
private void BurnComplete(uint status)
{
MessageBox.Show("Fine :)");
}

Windows 7 alatt nem tudtam működésre bírni, ezzel a hibával szállt el:

The owner of the PerUser subscription is not logged on to the system specified (Exception from HRESULT: 0x80040210)

Kerestem a megoldást, de nem akartam vele egy egész napot el…ni, így inkább hagytam.

Az XPBurn helyett az IMAPI2 használatát javaslom, erről egy nagyon jó leírás és demó itt található:

http://www.codeproject.com/KB/miscctrl/imapi2.aspx

A cikkben található megoldást még nem volt időm tesztelni, de hamarosan sort kerítek rá, ha valaki próbálta, akkor írhatna róla egy kommentet.

Advertisements
This entry was posted in írás, c#, CD, DVD, Imapi2, XPBurn. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s