RDP / MSTSC Игнорирует исправление манифеста highdpi при запуске из приложения Windows Form
Я использую VS2017 и сделал очень простой "пусковой механизм" для различных файлов настроек RDP с помощью приложения Windows Forms. Это просто вызывает Process.Start с прямой ссылкой на файл.rdp, или, в качестве альтернативы, просто прямо на mstsc.exe
Приложение (и сеансы RDP) отображается и работает правильно на стандартных ПК. Однако я столкнулся с проблемой на устройствах с высоким DPI, таких как Surface Books/ Pros.
Неправильное масштабирование RDP-клиента является довольно известной проблемой, и мы исправили эту проблему с помощью метода манифеста / рег изменения. Это подтверждается работой. Двойной щелчок конфигурационного файла.rdp тоже работает правильно.
( https://www.blackforce.co.uk/2016/04/18/remote-desktop-rdp-resolution-on-a-surface-book)
Мое собственное приложение также отображается правильно в правильном масштабе. Однако когда я запускаю RDP с помощью Process.Start, клиент RDP плохо масштабируется, как это всегда было до исправления манифеста. Я пытался открыть клиент в одиночку, и с файлом.rdp и результат тот же. Я открываю тот же файл.rdp вручную, а не через мое приложение, и клиент масштабируется правильно.
Кто-нибудь может повторить это или посоветовать, почему файл манифеста mstsc игнорируется при запуске таким способом? Я также пытался использовать ProcessStartInfo, чтобы установить UseShellExecute, но все тот же результат.
1 ответ
Настольные приложения Windows, такие как RDP, могут указывать режим масштабирования DPI ("Режим осведомленности о DPI") либо через настройку манифеста, либо через вызовы API во время инициализации. Приложения будут вести себя по-разному всякий раз, когда масштабный коэффициент дисплея, на котором они находятся, изменяется. Вы можете прочитать больше об этом здесь.
Я бы предположил (я не пытался это подтвердить, чтобы подтвердить это предположение), что процесс RDP использует манифест для объявления своей осведомленности о DPI (в зависимости от DPI монитора) и что при запуске процесса через Process.Start это определенная осведомленность DPI о приложении меняется... возможно, осведомленность о DPI процесса вызова?
Я бы использовал System Internals Process Explorer, чтобы определить осведомленность о DPI приложения RDP, когда оно работает должным образом, а затем сравнить его с осведомленностью DPI приложения RDP, когда оно запускается из вашего приложения. Если это так, посмотрите, можете ли вы указать осведомленность DPI о процессе, который вы хотите запустить в Process.Start. Еще одна вещь, которую вы можете попробовать, - настроить DPI DPI вашего приложения WinForms на то же DPI, что и приложение RDP (для каждого монитора), чтобы посмотреть, поможет ли это.
Кроме того, я предполагаю, что вы работаете в ОС> 8.1, так как поддержка Per-Monitor была представлена в 8.1.