High DPI madness with SQL Server Management Studio solved by work around!

How to fix scaling issues in SQL Server Management Studio on 4k or other high density displays.

Many thanks to SpaghettiDBA (Gianluca Sartori). He wrote about this on SQLServerCentral.com: http://www.sqlservercentral.com/blogs/spaghettidba/2015/10/14/ssms-in-high-dpi-displays-how-to-stop-the-madness/

Sadly enough Microsoft sees this as a non issue for us and won’t fix this issue. (https://connect.microsoft.com/SQLServer/feedback/details/764009/ssms-does-not-display-properly-in-high-dpi). Many more High DPI displays will occur in the future.

In short how to fix this in four easy steps:

1) Create [SSMSDPISCALING.reg] file as per example below
2) Create [Ssms.exe.manifest] file as per example below
3) Double-click on [SSMSDPISCALING.reg] to enter a key into the registry
4) Copy [Ssms.exe.manifest] file to “C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio” folder
    (Replace 120 by 130, 110, 105 or 100 if using another version of SSMS than SQL 2014)

I have tested this work around with SQL Server 2014 and SQL Server 2016 Management Studio Versions on Windows 10

Reg file [SSMSDPISCALING.reg] contains:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
“PreferExternalManifest”=dword:00000001

Manifest file [Ssms.exe.manifest] contains:
<?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>