1

我正在使用 VS2017,并使用 Windows 窗体应用程序为各种 RDP 设置文件制作了一个非常简单的“启动器”。这只是调用 Process.Start 并直接链接到 .rdp 文件,或者直接链接到 mstsc.exe

应用程序(和 RDP 会话)在标准 PC 上显示并正常工作。但是,我在 Surface Books/pros 等高 DPI 设备上遇到了问题。

RDP 客户端无法正确扩展是一个众所周知的问题,我们已经使用 manifest/reg 更改方法解决了这个问题。这是确认工作。双击 .rdp 配置文件也可以正常工作。

https://www.blackforce.co.uk/2016/04/18/remote-desktop-rdp-resolution-on-a-surface-book

我自己的应用程序也以正确的比例正确显示。但是,当我使用 Process.Start 启动 RDP 时,RDP 客户端的扩展性很差,就像在清单修复之前一样。我试过单独打开客户端,使用 .rdp 文件,结果是一样的。我手动打开了相同的 .rdp 文件,而不是通过我的应用程序,并且客户端已正确缩放。

任何人都可以复制这个,或者告诉为什么以这种方式启动时忽略 mstsc 清单文件?我也尝试过使用 ProcessStartInfo 来设置 UseShellExecute 但仍然是相同的结果。

4

1 回答 1

0

Windows 桌面应用程序(例如 RDP)可以通过清单设置或在初始化期间通过 API 调用指定 DPI 缩放模式(“DPI 感知模式”)。每当它们所在的显示器的比例因子发生变化时,应用程序的行为就会有所不同。您可以在此处阅读有关此内容的更多信息。

我推测(我没有尝试过这个来证实这个推测)RDP 进程正在使用清单来声明它的 DPI 意识(如 Per Monitor DPI 意识)并且当你通过 Process.Start 启动一个进程时应用程序的指定 DPI 意识正在发生变化……可能是调用进程的 DPI 意识?

我将使用 System Internals Process Explorer 来确定 RDP 应用程序在按预期运行时的 DPI 意识,然后将其与 RDP 应用程序从您的应用程序启动时的 DPI 意识进行比较。如果是这种情况,请查看是否可以在 Process.Start 中指定要启动的进程的 DPI 感知。您可以尝试的另一件事是将 WinForms 应用程序的 DPI 感知设置为与 RDP 应用程序(每个监视器)相同的 DPI 感知,看看是否有帮助。

另外,我假设您在 OS > 8.1 上运行,因为在 8.1 中引入了 Per-Monitor 支持。

于 2017-10-20T03:12:32.970 回答