I have a large app that we are delaying supporting dynamic DPI for. Currently, when we launch our app via RemoteApp (RDP to our Windows Server 2016 server) on a high DPI screen, the text and controls overlap.
As a work around for our customers with high DPI displays, we found the best solution is to set HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\IgnoreClientDesktopScaleFactor to 1. This stops the RemoteApp from using DPI scaling and makes it look decent.
The problem is that the size of the window itself starts off super tiny.
If you change the scaling factor on the local PC and then change it back, it will automatically size the window back up to the correct scaling.
We would prefer to use this workaround instead of adding a mstsc manifest file to our customers' PC's, but we would need to know how to force the scaling to start off with the local PC's settings while still avoiding DPI scaling.
Best Answer
When doing RDP from a high-DPI client monitor into a low-DPI server, the problem is that the RDP window doesn’t scale up, representing the screen pixel by pixel, so making everything tiny and unreadable.
In the article Remote Desktop client on HiDPI (Retina) displays: Work around pixel scaling issues, the author, Chris K., presents the solution of disabling HiDPI scaling for
mstsc2.exe
usingAppCompatFlags
. As this is impossible to do for a system executable, he proposes the simple solution of creating a copy ofmstsc.exe
(calledmstsc2.exe
).In an elevated (admin) cmd shell, create a copy of
mstsc.exe
andmstsc.exe.mui
, where theen-us
part corresponds to the installed language:Then to set the
AppCompatFlag
for all users formstsc2.exe
:Now one should be able to start
mstsc2.exe
and connect to the remote host with no scaling issues.