Manifest file

From wiki.visual-prolog.com

A Visual Prolog project can contain a manifest file. The manifest file is a Microsoft invention to deal with side-by-side installation, a new hell that is supposed to replace the so called DLL hell.

The file is either named <project>.manifest or main.manifest (current standard).

The manifest file is an XML file, and it is linked into EXE/DLL as a resource. Windows automatically look for it there (if not found there it looks for a file called myProgram.exe.manifest in the same directory as myProgram.exe).

Sample manifest file

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        name="MyProgram"
        version="1.0.0.0"
        processorArchitecture="X86"
        type="win32"
    />
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                type="win32"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
</assembly>

The file contains three major elements:

  • The programs own assemblyIdentity
  • A trustInfo element
  • A dependency, which lists assemblyIdentity's of assemplies that the program depends on.

The assemblyIdentity element

<assemblyIdentity
    name="MyProgram"
    version="1.0.0.0"
    processorArchitecture="X86"
    type="win32"
/>

This element list attributes of the program/DLL itself.

The trustInfo element

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>

The dependency element

<dependency>
    <dependentAssembly>
        <assemblyIdentity
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            type="win32"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>

References