Mstsc ActiveX控件警告

时间:2015-11-13 12:01:15

标签: c# delphi activex rdp mstsc

我正在一个项目中,应用程序需要自动连接到删除桌面(RDP协议)。为此,我正在使用来自Delphi的库MSTSCLib_TLB,它使用mstscax.dll。 问题是Windows识别连接来自ActiveX控件,并显示此警告:

enter image description here

此警告很难在服务器上自动连接。

注意:“网站正在尝试启动远程连接”,而我正在使用可执行文件执行此操作... 我在互联网上阅读了这条消息,并在Windows注册表上尝试了一些解决方案,但没有一个解决了这个问题。 我接受在Windows注册表上工作的解决方案,以停止显示此警告,但我更喜欢以编程方式解决方案。我看到了使用IObjectSafety签署ActiveX对象并将SetInterfaceSafetyOptions设置为“INTERFACESAFE_FOR_UNTRUSTED_CALLER”的消息,但我不知道这意味着什么以及如何实现它。

我的应用程序是用Delphi编写的,我在Windows 10上。到目前为止的代码是:

procedure TForm1.Button1Click(Sender: TObject);
var
  Client: TMsRdpClient9;
begin
  Client:= TMsRdpClient9.Create(Self);
  Client.Parent:= Self; //dont know why, but this ActiveX control needs a parent
  Client.Server:= Edit1.Text;
  Client.UserName:= Edit2.Text;
  Client.AdvancedSettings9.ClearTextPassword:= Edit3.Text;
  Client.OnLoginComplete:= LoginComplete;
  Client.Connect;
end;

2 个答案:

答案 0 :(得分:2)

知道了。我使用“TMsRdpClientNotSafeForScripting”代替使用“TMsRdpClient9”,代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  Client: TMsRdpClientNotSafeForScripting;
begin
  Client:= TMsRdpClientNotSafeForScripting.Create(Self);
  Client.Parent:= Form1;
  Client.Server:= Edit1.Text;
  Client.ControlInterface.UserName:= Edit2.Text;
  Client.AdvancedSettings2.ClearTextPassword:= Edit3.Text;
  Client.Connect;
end;

答案 1 :(得分:0)

user3810691提供的答案的本质也适用于C#WinForms。 在“COM组件”选项卡中(对于“选择工具箱项”),请转到:

  

Microsoft RDP客户端控制 - 版本10

而不是:

  

Microsoft RDP客户端控制(可再发行) - 版本10

这将使您无法安全地编写脚本"版本9(原文如此!)控制类型:

AxMSTSCLib.AxMsRdpClient9NotSafeForScripting