Click here to Skip to main content
Click here to Skip to main content

Manifest File Injection

, 9 May 2004 CPOL
Rate this:
Please Sign up or sign in to vote.
Embed a manifest into an executable as a resource for XP Theme support.

Sample Image - ManifestInjection.jpg


It's easy enough to include a manifest file with your application to provide XP theme support, but it's one more file to worry about when distributing an application. A more graceful solution is to include the manifest in the executable as a resource. It's not possible to include the manifest as a resource using the IDE because of the way the IDE handles embedded resources. This project aims at “injecting” a manifest directly into the exe after the exe is compiled, to provide full XP theme support.

Using the code

There are only a few key steps to get your manifest into the executable. The first is to read in the manifest as an array of bytes. That array is passed to the UpdateResource API provided by the kernel32 DLL. The only other code to note here is that, before UpdateResource can be called, you must call BeginUpdateResource. Last, in the finally block, EndUpdateResource is called regardless of the update success. The sample project implements the code as a static method, requiring the assembly path, the manifest path, and the name of the manifest to be injected (typically an int).

    // Read in the manifest as an array of byest to be injected to the 
    manifestStream = new FileStream(ManifestPath, FileMode.Open,
    manifestReader = new BinaryReader(manifestStream);
    manifestByteArray = manifestReader.ReadBytes( (int)manifestStream.Length );
    // Begin the injection process
    updatePointer = (IntPtr)BeginUpdateResource(AssemblyPath, false);
    if (updatePointer == IntPtr.Zero)
    if (UpdateResource(updatePointer, 24, ResourceName, 0, manifestByteArray, 
                 (uint)manifestByteArray.Length) != 1)
    result = true;
    if (updatePointer != IntPtr.Zero)
        EndUpdateResource(updatePointer, result);
    if (manifestReader != null)
    if (manifestStream != null)

The sample project implements the code as a static method requiring the assembly path, the manifest path, and the name of the manifest (typically an integer value) to be injected as arguments. Run the TestForms.exe to make sure it displays standard Windows controls. Use the sample app to browse for a .NET WinForms app (e.g., the TestForm.exe included with the project). Browse for a manifest file (also included in the sample project's directory). Inject the manifest into TestForm.exe and open TestForm.exe again.

For details on the API, see the MSDN article at:


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Web Developer PageLabs
United States United States
I'm the founder of PageLabs, a web-based performance and SEO optimization site.

Give your site a boost in performance, even take a free speed test!
Follow on   Twitter

Comments and Discussions

GeneralManifest Tool (mt.exe) in Microsoft Windows SDK Pinmembermfhobbs24-Jul-07 7:40 
GeneralRe: Manifest Tool (mt.exe) in Microsoft Windows SDK PinmemberAcoustic24-Jul-07 8:40 
GeneralXP Style affects performance? [modified] PinmemberConex19-Mar-07 3:10 
GeneralRe: XP Style affects performance? PinmemberAcoustic19-Mar-07 18:35 
GeneralEmbedding using IDE build events Pinmembertalon21128-May-06 11:29 
GeneralRe: Embedding using IDE build events PinmemberAcoustic10-May-06 4:37 
GeneralAutomatic Build Pinmemberwolfgang_hg28-Dec-05 5:12 
GeneralRe: Automatic Build PinmemberAcoustic8-Jun-06 9:55 
QuestionNo touch Deployment?? PinmemberGeir Aamodt30-May-05 6:30 
AnswerRe: No touch Deployment?? PinmemberGeir Aamodt1-Jun-05 1:07 
GeneralManifest in signed assemblies PinmemberLouis-Philippe Carignan2-Feb-05 12:28 
GeneralRe: Manifest in signed assemblies PinmemberAcoustic3-Feb-05 5:15 
GeneralRe: Manifest in signed assemblies PinmemberPaul Carroll18-Apr-05 2:52 
I had the same problem, and sure enough resigning the assembly made my toolband start appearing again. So now I can add the .manifest and the IE toolband still shows itself.
the only problem is any button in the band appears as normal.
I can verify that the button is using the correct style by putting the manifest into the IExplore directory and calling it 'iexplore.exe.manifest' and the button shows itself with the correct XP styling.
Can anyone shed any light on this?
Paul Carroll

GeneralRe: Manifest in signed assemblies PinmemberAcoustic3-Feb-05 5:18 
QuestionResource Types? PinmemberWayne Phipps30-Jan-05 0:32 
AnswerRe: Resource Types? PinmemberAcoustic8-Jun-06 10:05 
GeneralInjecting manifest into dll Pinmemberxpit10-Jan-05 1:48 
GeneralRe: Injecting manifest into dll PinmemberSpikiermonkey26-Jan-05 12:06 
Generalthis code was decompiled from ThemeMe Pinmember0x3D1-Jul-04 5:55 
GeneralRe: this code was decompiled from ThemeMe PinmemberAcoustic1-Jul-04 8:12 
GeneralEnabling XP theme support PinmemberBramH10-May-04 23:02 
GeneralRe: Enabling XP theme support PinmemberOha Ooh10-May-04 23:58 
GeneralRe: Enabling XP theme support PinmemberAcoustic11-May-04 14:23 
GeneralRe: Enabling XP theme support Pinmemberjmt9n19-May-04 7:33 
GeneralRe: Enabling XP theme support Pinmemberjgeer28-May-04 9:24 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.141223.1 | Last Updated 10 May 2004
Article Copyright 2004 by TylerBrinks
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid