Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you add a manifest to an MFC application and set the supportedOS?

I'm trying to run the Microsoft Platform Ready Test Tool 4.6 for Windows Server 2012: http://www.microsoft.com/en-ca/download/details.aspx?id=41676

I'm running into an issue. Its complaining that an MFC application I have has a manifest, but that manifest is missing the supportedOS section. I know how to add this in to C# projects, but how do you do it in MFC applications?

The MFC application shows up under, "Executables with manifest missing the supportedOS section".

like image 999
Alexandru Avatar asked Apr 10 '14 16:04

Alexandru


1 Answers

Just got it. Process was as follows:

Right click your solution, go to Properties. Drill down from Configuration Properties -> Linker -> Manifest File. Set the following:

Generate Manifest to "Yes (/MANIFEST)"

Manifest File to "app.manifest"

Now the trick...add a new file in your MFC application. Call it "app.manifest" as we made this the referenced name above. Make sure it has manifest XAML in it, for example:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Specifying requestedExecutionLevel node will disable file and registry virtualization.
            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- A list of all Windows versions that this application is designed to work with. 
      Windows will automatically select the most compatible environment.-->

      <!-- If your application is designed to work with Windows Vista, uncomment the following supportedOS node-->
      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>-->

      <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->

      <!-- If your application is designed to work with Windows 8, uncomment the following supportedOS node-->
      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>-->

      <!-- If your application is designed to work with Windows 8.1, uncomment the following supportedOS node-->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>

    </application>
  </compatibility>

  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
  <!-- <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>-->

</asmv1:assembly>

Give yourself a tap on the back, you hero.

Tip: To view the manifest of your executable, open your executable in Notepad++ and scroll to the bottom. Its at the bottom. At least, this worked for me.

like image 74
Alexandru Avatar answered Sep 27 '22 18:09

Alexandru