2017-10-18 123 views
1

我正在使用VS2017並使用Windows窗體應用程序爲各種RDP設置文件製作了一個非常簡單的「啓動程序」。這只是調用Process.Start,直接鏈接到.rdp文件,或者直接調用mstsc.exeRDP/MSTSC忽略從Windows窗體應用程序啓動時的highdpi清單修復

應用程序(和RDP會話)在標準PC上正常顯示並正常工作。然而,我已經遇到高DPI設備上的問題,例如Surface Books /專業人員。

RDP客戶端不能正確擴展是一個相當知名的問題,我們使用清單/ 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,但仍然是相同的結果。

+1

我的水晶球說你的Winforms應用程序開啓了抖動強制,所以運行的是32位程序。所以會啓動c:\ windows \ syswow64 \ mstsc.exe,這是你沒有破解的。 PreferExternalManifest的黑客攻擊方式很簡單,沒有什麼比使用全局解決方案可能對本地化問題造成的損害。註冊表項的32位視圖位於Wow6432Node中。使用Project> Properties> Build刪除抖動強制。 –

+0

嗨漢斯,你可以把你的評論作爲答案,所以我可以將它標記爲這樣,因爲它解決了我的問題!非常感謝。至於PreferExternalManifest破解 - 我同意,但我不知道更具體的修復?再次感謝!馬克 –

+0

如果只有我知道如何擺脫這種可怕。請問superuser.com。如果您對此感到滿意,那麼只需自己發佈答案。 –

回答

0

Windows桌面應用程序(如RDP)可以通過清單設置或初始化期間的API調用指定DPI縮放模式(「DPI感知模式」)。只要顯示屏的比例因子發生變化,應用程序的行爲就會有所不同。你可以閱讀更多關於這個here

我推測(我沒有試過這個來證實這個猜測)RDP進程正在使用一個清單來聲明它是DPI認識(Per Monitor DPI aware),並且當你啓動一個進程時Process.Start指定應用程序的DPI意識正在發生變化......可能是DPI意識到調用過程?

我會使用System Internals Process Explorer來確定RDP應用程序按預期運行時的DPI感知程度,然後將其與從您的應用程序啓動時的RDP應用程序的DPI感知進行比較。如果是這種情況,請查看您是否可以指定要在Process.Start中啓動的進程的DPI認知。您可以嘗試的另一件事是將您的WinForms應用程序的DPI感知設置爲與RDP應用程序(每個監視器)相同的DPI感知,以查看是否有幫助。

另外,我假設你在OS上運行8.1,因爲在8.1中引入了每個監視器的支持。

相關問題