C# WinForms ActiveX RDP客户端问题与NLA
我正在尝试用C语言制作一个WinForms RDP客户端,使用RDP ActiveX控件作为一个学习练习。当目标服务器不使用网络级身份验证(NLA)时,我可以让一切正常工作,但当我尝试将控件配置为使用“EnableCredSSupSupport”时,我认为NLA需要使用“EnableCredSSupSupport”,在运行代码时会出现以下错误: 类型的未处理异常 中出现“System.Windows.Forms.AxHost.InvalidActiviexStateException” AxInterop.MSTSCLib.dll 代码是:C# WinForms ActiveX RDP客户端问题与NLA,c#,activex,rdp,C#,Activex,Rdp,我正在尝试用C语言制作一个WinForms RDP客户端,使用RDP ActiveX控件作为一个学习练习。当目标服务器不使用网络级身份验证(NLA)时,我可以让一切正常工作,但当我尝试将控件配置为使用“EnableCredSSupSupport”时,我认为NLA需要使用“EnableCredSSupSupport”,在运行代码时会出现以下错误: 类型的未处理异常 中出现“System.Windows.Forms.AxHost.InvalidActiviexStateException” AxIn
AxMsRdpClient9NotSafeForScripting rdp;
rdp = new AxMsRdpClient9NotSafeForScripting();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
((System.ComponentModel.ISupportInitialize)(rdp)).BeginInit();
rdp.Dock = System.Windows.Forms.DockStyle.Fill;
rdp.Enabled = true;
rdp.Location = new System.Drawing.Point(0, 0);
rdp.Name = "rdp";
rdp.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("rdp.OcxState")));
rdp.Size = new System.Drawing.Size(828, 687);
rdp.TabIndex = 0;
rdp.AdvancedSettings9.AuthenticationLevel = 2;
rdp.AdvancedSettings9.EnableCredSspSupport = true;
MainsplitContainer.Panel2.Controls.Add(rdp);
((System.ComponentModel.ISupportInitialize)(rdp)).EndInit();
rdp.Server = "XXX.XXX.XXX.XXX";
rdp.Connect();
很多代码都是从以下来源拼凑而成的,但是学习代码通常是站在巨人的肩膀上的,对吗
…还有一些我没有名声的消息来源(第一篇帖子!)
有什么见解可以帮助我吗
谢谢
..A和工作代码:
AxMSTSCLib.AxMsRdpClient8NotSafeForScripting _RDPClient;
_RDPClient = new AxMSTSCLib.AxMsRdpClient8NotSafeForScripting();
MainsplitContainer.Panel2.Controls.Add(_RDPClient);
((System.ComponentModel.ISupportInitialize)(_RDPClient)).BeginInit();
_RDPClient.Dock = System.Windows.Forms.DockStyle.Fill;
_RDPClient.Enabled = true;
_RDPClient.Location = new System.Drawing.Point(0, 0);
_RDPClient.Name = "axMsTscAxNotSafeForScripting1";
_RDPClient.OcxState = ((System.Windows.Forms.AxHost.State)(_RDPClient.OcxState));
_RDPClient.Size = new System.Drawing.Size(579, 608);
_RDPClient.TabIndex = 0;
_RDPClient.AdvancedSettings8.EnableCredSspSupport = true;
((System.ComponentModel.ISupportInitialize)(_RDPClient)).EndInit();
_RDPClient.OnDisconnected += new IMsTscAxEvents_OnDisconnectedEventHandler(axMsTscAx_OnDisconnected);
_RDPClient.Server = IP;
_RDPClient.Connect();
使用:
在C#中查找等效项早期设置AxHost属性很好,但在创建RDP组件之前,您无法接触其属性。这是典型的惰性.NET方式,在最后一刻发生的。将分配移动到表单的加载事件处理程序。感谢您的回复!我是C#的新手,所以不太清楚AxHost属性和RDP组件属性之间的区别。为了进行测试,我将上面的所有内容移动到Form1_Load事件处理程序。我不再收到错误,但我也没有将RDP组件加载到面板中。这里的最终目标是制作一个简单的带选项卡的RDP客户端,每个会话都有选项卡。我希望同时打开多个会话。如果我将内容移动到_Load事件处理程序,看起来我无法实现这一点?再次感谢!最明显的方法是以后再添加标签。我想对有专业知识的人来说是显而易见的!无论如何,我现在已经让它工作,并将粘贴上面的代码。我(想我)所做的就是移动控件。添加到顶部并开始使用控件的V8。我想这是一个符合你的建议的预兆,但我在黑暗艺术方面没有足够的技能来评论!
CType(rdp, System.ComponentModel.ISupportInitialize).EndInit()
rdp.CreateControl()