Saving an embedded file in C#


Suppose you are working on an application - which needs to extract another application at runtime.  How do you do that?

We can start with the steps below:

Step 1: Create a new Console Application

1.gif
 
Step 2: Embed an exe file inside it

For this - right click on the solution explorer window and choose "Add existing item"

2.gif
 
In the appearing dialog box - type c:\windows\system32\regedt32.exe

For convenience I am using the registry editor utility of windows.

(Note: if your windows folder is in different drive you have to change the above path)

3.gif
 
Now you can see the file added to solution explorer.

Choose the properties of file and change the Build Action property to Embedded Resource.

4.gif
 
Now build your project - if successful you are ready with an exe embedded.

Step 3: Get the embedded resource name

Now our goal is to save the embedded exe in runtime to the same application folder.  For achieving this we have to first get the embedded name of the exe file.
The embedded name of the resource file would be in the format ApplicationNameSpace.ResourceName.

In our case it is: EmbedExe.regedt32.exe

You can use the method

Assembly.GetExecutingAssembly().GetManifestResourceNames()

to get all the resource names in the assembly.

Step 4: Save the embedded resource

In this final step we are retrieving the bytes of assembly and saving into a file stream.  For this we are using Stream, FileStream classes.

The code is given below:

Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmbedExe.regedt32.exe");
            FileStream fileStream = new FileStream("new.exe", FileMode.CreateNew);
            for (int i = 0; i < stream.Length; i++)
                fileStream.WriteByte((byte)stream.ReadByte());
            fileStream.Close();

We can see in the output folder that the new.exe is created.

5.gif

erver'>