Manifest to manage scaling for for High DPI displays

Microsoft Dynamics GPWith more clients working remotely, there has been an increase in the number of people asking me about Microsoft Dynamics GP not scaling text properly. The problem can occur in the text showing either very small or very large (with different versions of Microsoft Dynamics GP handling fonts differently they can display with different problems):

Dynamics GP with text showing too large

This issue has been raised with me by users with the issue on local clients running on high DPI devices like the Microsoft Surface or when using them to access Microsoft Dynamics GP via RDP.

Fortunately, there is a known workaround available for this issue. Steve Endow on his old Dynamics GP Land blog post about resolving the issue using a manifest file. Then in 2018, Nathan Hayden posted about a similar approach for remote desktop connections.

The first step is to create a manifest file called Dynamics.exe.manifest or Mstsc.exe.manifest (depending on whether you’re fixing the issue for a local or remote desktop accessed client) containing this XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>
<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>
</assembly>

This file should be placed next to the exe file to which it should be applied. By default, this will be %ProgramFiles(x86)%\Microsoft Dynamics\GP (adjust based on your version or install folder) or %windir%\SysWOW64\ depending on if the fix is for a local or remote desktop accessed client.

Then use the below to create a manifest.reg file to add the DWord registry entry which tells Windows to prefer and use the external manifest just created:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001

Once you’ve created the registry file above, double-click it to add the DWord to the registry.

When you next launch Microsoft Dynamics GP or connect to the RDP session and launch it, the text in the client should display correctly.