2

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

在此处输入图像描述

此警告使服务器上的自动连接变得困难。

注意:“网站正在尝试启动远程连接”,而我正在从可执行文件中执行此操作...我在 Internet 上阅读了有关此消息的信息,并在 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;
4

2 回答 2

3

知道了。我没有使用“TMsRdpClient9”,而是使用了“TMsRdpClientNotSafeForScripting”和以下代码:

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;
于 2015-11-13T13:00:42.337 回答
1

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

Microsoft RDP 客户端控制 - 版本 10

代替:

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

这将为您提供“不安全的脚本”版本 9(原文如此!)控件类型:

AxMSTSCLib.AxMsRdpClient9NotSafeForScripting

于 2017-11-03T04:38:23.803 回答