【问题标题】:RDP / MSTSC Ignores highdpi manifest fix when launched from windows form application从 Windows 窗体应用程序启动时,RDP / MSTSC 忽略 highdpi 清单修复
【发布时间】:2017-10-18 13:20:50
【问题描述】:

我正在使用 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 但结果还是一样。

【问题讨论】:

  • 我的水晶球说您的 Winforms 应用程序启用了抖动强制,因此作为 32 位进程运行。所以将启动 c:\windows\syswow64\mstsc.exe,你没有破解的那个。顺便说一句,PreferExternalManifest hack 实在是太愚蠢了,这与通过全局解决方案解决局部问题所造成的损害完全不同。注册表项的 32 位视图位于 Wow6432Node 中。使用 Project > Properties > Build 消除抖动强迫。
  • 嗨汉斯,你能把你的评论作为答案,所以我可以这样标记它,因为它解决了我的问题!非常感谢。至于 PreferExternalManifest hack - 我同意,但我不知道更具体的修复?再次感谢!标记
  • 要是我知道如何摆脱那种可怕的感觉就好了。请在 superuser.com 上询问。如果您对此感到满意,请自己发布答案。

标签: winforms visual-studio scaling rdp mstsc


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多