Я пытаюсь сделать клиентом WinForms RDP на С# с помощью элемента управления RDP ActiveX в качестве учебного упражнения. Я могу заставить все работать, когда целевой сервер не использует аутентификацию уровня сети (NLA), но когда я пытаюсь настроить этот элемент управления на использование "EnableCredSspSupport", который, как мне кажется, необходим для NLA, я получаю следующую ошибку при запуске код:
Необработанное исключение типа "System.Windows.Forms.AxHost.InvalidActiveXStateException" произошло в AxInterop.MSTSCLib.dll
Код:
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();
Многие из этого кода искажены из следующих источников, но обучение коду обычно стоит на плечах гигантов, верно !?
http://msdn.microsoft.com/en-us/library/aa383022(VS.85).aspx https://searchcode.com/codesearch/view/3716390/
... И еще несколько источников, на которые у меня нет репутации (первый пост!)
Какие-нибудь идеи, чтобы помочь мне на моем пути?
Благодарю!
.... Aaaand рабочий код:
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();
Использование:
CType(rdp, System.ComponentModel.ISupportInitialize).EndInit()
rdp.CreateControl()
Найдите свой эквивалент в С#