我已经在MSDN论坛上搜索了此文件,但似乎每个人(我认为)都建议恢复为RDP 7.x(卸载MS Update KB2592687)。
我有一个用C#/WPF编写的自定义远程桌面客户端,该远程桌面ActiveX控件托管在WindowsFormsHost控件内。
该应用程序在之前运行良好,可以更新RDP 8.0(MS更新KB2592687)。如果我卸载了MS更新(还原为RDP 7.1),则该应用程序正常运行。
我的RDP客户端用于连接到Virtualbox VRDP(Virtualbox 4.2.x),无需身份验证(空)。安装RDP 8.0后,Windows远程桌面客户端(mstsc.exe)可以很好地进行连接,并具有更好的响应能力(RDP 8.0增强功能);但是我的自定义RD客户端无法连接。
经过进一步调查,我的自定义RDP客户端不会引发任何异常或触发 OnConnecting 和 OnLogonError 或其他大多数事件。
奇怪的是,它仅触发这两个事件(按顺序)
OnAuthenticationWarning显示的
OnAuthenticationWarning已关闭
我还使用RawCap(http://www.netresec.com/?page=RawCap)进行了测试,以查看我的自定义RDP客户端是否在发生这些事件之前将数据包发送到Virtualbox VRDP。令人惊讶的是,它甚至没有发送数据包。 (MS RD客户端-mstsc.exe正常运行。)
因此,归结为我的自定义RDP客户端上的这些事件/方法调用,不幸的是我被卡住了。
(为简明起见,代码已缩短)
AxMSTSCLib.AxMsRdpClient8 rdp = new AxMSTSCLib.AxMsRdpClient8();
rdp.OnAuthenticationWarningDisplayed+=new EventHandler(rdp_OnAuthenticationWarningDisplayed);
rdp.OnAuthenticationWarningDismissed+=new EventHandler(rdp_OnAuthenticationWarningDismissed);
rdp.Server = server;
rdp.AdvancedSettings8.RDPPort = 5050;
//No username/password since Virtualbox RDP authentication is set to *null*
//MS RD Client connects just fine to Virtualbox RDP without username/password
try
{
rdp.Connect();
}
catch (Exception ex)
{
}
在 OnAuthenticationWarningDisplayed 和 OnAuthenticationWarningDismissed 上设置一个断点,可确认在 Connect()方法之后均触发了这两个事件。
我怀疑在调用 Connect()方法后,ActiveX控件正试图显示一个对话框(??);但我似乎无法弄清楚。
是否有人使用RDP 8.0完成了一些自定义客户端?使它能够工作的前提是什么(代码)。
非常感谢!将不胜感激。
最佳答案
解决了这个问题!
只需尝试使用 AxMSTSCLib.AxMsRdpClient8NotSafeForScripting 而不是 AxMSTSCLib.AxMsRdpClient8
这是工作代码(Delphi):
rdp:TMsRdpClient8NotSafeForScripting; // ***Instead of TMsRdpClient8 (!!!)***
...
if rdp.Connected<>0 then rdp.Disconnect;
rdp.Server:='192.168.1.1';
rdp.UserName:='User';
rdp.AdvancedSettings8.ClearTextPassword:='Password';
rdp.AdvancedSettings8.AuthenticationLevel:=2;
rdp.AdvancedSettings8.EnableCredSspSupport:=true;
rdp.AdvancedSettings8.NegotiateSecurityLayer:=false;
rdp.AdvancedSettings8.RelativeMouseMode:=true;
rdp.AdvancedSettings.BitmapPeristence:=1;
rdp.AdvancedSettings.Compress:=1;
rdp.AdvancedSettings8.SmartSizing:=true;
rdp.DesktopHeight:= Screen.Height;
rdp.DesktopWidth:= Screen.Width;
rdp.FullScreen:=true;
rdp.ColorDepth:= 15;
rdp.AdvancedSettings8.RedirectDrives:=false;
rdp.AdvancedSettings8.RedirectPrinters:=false;
rdp.AdvancedSettings8.RedirectClipboard:=true;
rdp.AdvancedSettings8.RedirectSmartCards:=false;
rdp.Connect;
P.S.并且不要使用以下属性:
rdp.AdvancedSettings8.AuthenticationServiceClass
关于使用RDP 8.0的C#自定义远程桌面客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19869076/