ผู้ใช้ Windows 10 บนจอความละเอียดสูง (4K HiDPI) มักเจอปัญหา: ข้อความ ไอคอน และองค์ประกอบของแอปพลิเคชันเก่า (Legacy apps ที่ไม่รองรับ High-DPI screen modes) กลายเป็นขนาดเล็กมาก เบลอ และอ่านไม่ออก
ปัญหานี้ได้รับการแก้ไขบางส่วนใน Windows 10 Fall Creators Update (1703) เนื่องจากมีการรองรับ Dynamic DPI scaling เพิ่มเติม อย่างไรก็ตาม เมื่อเชื่อมต่อไปยังเดสก์ท็อปของคอมพิวเตอร์ระยะไกลผ่าน RDP ปัญหาการ Scaling ยังคงอยู่ (mstsc.exe client ยังไม่รองรับ Normal scaling อย่างสมบูรณ์)
ใน Windows 8.1 และ Windows 10 Local DPI จะถูกส่งไปยังการเชื่อมต่อ RDP ทำให้ไอคอนและข้อความในหน้าต่าง RDP กลายเป็นขนาดเล็กมากและอ่านยาก
วิธีแก้ไข: สร้าง Manifest file สำหรับ mstsc.exe
เป็นวิธีการแก้ไข (Workaround) สามารถใช้แอปพลิเคชัน RDCMan (ของ Microsoft) สำหรับการเชื่อมต่อ RDP แต่มีวิธีแก้สำหรับ mstsc.exe แบบ Native client
จุดสำคัญคือ สามารถสร้างไฟล์ Manifest (.manifest) แยกต่างหากสำหรับแอปพลิเคชันเฉพาะได้ เพื่อให้ Windows ใช้ข้อมูลจาก Manifest file นี้ก่อนเมื่อเริ่มแอปพลิเคชัน ให้สร้าง DWORD parameter (32-bit) ชื่อ PreferExternalManifest ค่า Decimal 1 ใน Registry key: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide
สามารถสร้าง Registry parameter นี้ด้วยคำสั่ง:
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f
จากนั้นในไดเรกทอรี %SystemRoot%\System32\ (ซึ่งมีไฟล์ mstsc.exe) ให้สร้างไฟล์ mstsc.exe.manifest ด้วยโค้ดต่อไปนี้:
<?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="https://schemas.microsoft.com/SMI/2005/WindowsSettings">
<ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="https://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
หมายเหตุ คุณสามารถดึงค่าเหล่านี้สำหรับ Manifest file เองได้โดยใช้ Resource Hacker เปิด mstsc.exe ด้วย Resource Hacker คัดลอกข้อมูลจาก Manifest → 1 : 1033 section และเพิ่ม section พร้อม flag dpiAware ค่า false
รีสตาร์ท Windows และลองเชื่อมต่อ Remote Desktop ไปยังคอมพิวเตอร์/เซิร์ฟเวอร์ระยะไกลด้วย mstsc.exe จะเห็นว่าเนื้อหาในหน้าต่าง RDP แสดงผลปกติแล้ว
วิธีเดียวกันนี้สามารถนำไปใช้สร้าง Manifest file สำหรับแอปพลิเคชันใดๆ ที่ไม่รองรับ Native scaling ได้