|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Contents
IntroductionIn this article, you will learn how to convert an MP3 file to an executable file. What You Will Learn From This Article
ConversionHere is a description how this program works. First the user chooses the MP3 files he wished to convert to EXE. After that, an instance of The source code we compile is source code of a simple application that doesn't have a window, extracts the embedded MP3 file and plays that file. The source file that is compiled is itself embedded in the first application and extracted to temp folder at startup. Implementation DetailsCompiling Source File DynamicallyMicrosoft.CSharp.CSharpCodeProvider pr
= new Microsoft.CSharp.CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
string pathtoicon=""; // pathtoicon variable holds the path of the icon
// for generated executable
if (File.Exists(Application.StartupPath + "\\icon.ico"))
{
pathtoicon= Application.StartupPath + "\\icon.ico";
}
if (skinRadioButton2.Checked)
{
pathtoicon = this.pictureBox1.ImageLocation;
}
cp.CompilerOptions = "/target:winexe" + " " + "/win32icon:" + "\"" +
pathtoicon + "\""; // specify options for compiler
cp.GenerateExecutable = true; // yes, generate an EXE file
cp.IncludeDebugInformation = false; // here we add the mp3 file as
// as an embedded resource
cp.EmbeddedResources.Add(this.textBox1.Text); // were to save the executable
// specified by savefiledialog
cp.OutputAssembly = sv.FileName;
cp.GenerateInMemory = false;
cp.ReferencedAssemblies.Add("System.dll"); // this and the following
cp.ReferencedAssemblies.Add("System.Data.dll"); // lines add references
cp.ReferencedAssemblies.Add("System.Deployment.dll");
cp.ReferencedAssemblies.Add("System.Drawing.dll");
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
cp.ReferencedAssemblies.Add("System.Xml.dll");
cp.TreatWarningsAsErrors = false;
string temp = Environment.GetEnvironmentVariable("TEMP");
// compile the source file
CompilerResults cr = pr.CompileAssemblyFromFile(cp, temp + "\\it.cs");
if (cr.Errors.Count>0)
{
MessageBox.Show("There was an error while converting the file","Error",
MessageBoxButtons.OK,MessageBoxIcon.Error); //error checking
}
Extracting Embedded File During RuntimeThis portion of code is from the source file that is compiled by the program. This code extracts embedded resource from the application during runtime. //this code requires System.Reflection namespace
//get names of resources in the assembly
string[] myassembly
= Assembly.GetExecutingAssembly().GetManifestResourceNames();
//create stream from the resource.
Stream theResource
= Assembly.GetExecutingAssembly().GetManifestResourceStream(myassembly[0]);
//Create binary reader from the stream
BinaryReader br = new BinaryReader(theResource);
//then filestream
FileStream fs = new FileStream(Environment.GetEnvironmentVariable("TEMP") +
+"\\it.mp3" , FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs); //and then binary writer
byte[] bt = new byte[theResource.Length]; //read the resource
theResource.Read(bt,0, bt.Length); //and then write to the file
bw.Write(bt); //don't forget to close all streams
br.Close();
bw.Close();
We pass Drag and DropTo implement drag and drop functionality from Windows Explorer, I use the class that came with the source code of this book. You need to create an instance of the DragAndDropFileComponent drag = new DragAndDropFileComponent(this.components);
drag.BeginInit();
drag.FileDropped += new FileDroppedEventHandler(drag_FileDropped);
drag.HostingForm = this;
drag.EndInit();
Here is the event handler: void drag_FileDropped(object sender, FileDroppedEventArgs e)
{
if (e.Filenames!=null &
e.Filenames.Length!=0 & e.Filenames[0].EndsWith(".mp3"))
{
this.textBox1.Text = e.Filenames[0];
}
}
Playing MP3 FileIn order to play an MP3 file from my application, I used this class. After you add MP3Player pl = new MP3Player();
try
{
pl.Open(Environment.GetEnvironmentVariable("TEMP") + "\\it.mp3");
pl.Play();
//wait until the file is played and then quit
//this no longer causes 100% CPU utilization
System.Threading.Thread.Sleep(((int)pl.AudioLength)+1);
Application.Exit();
}
catch (Exception ex)
{ }
The program starts playing the MP3 file when it is loaded and quits when playing is over. Final ThoughtsThe idea itself of converting an MP3 file to an EXE file is a little bit strange and the whole application is interesting. History
|
||||||||||||||||||||||