我正在一个项目中,应用程序需要自动连接到删除桌面(RDP协议)。为此,我正在使用来自Delphi的库MSTSCLib_TLB,它使用mstscax.dll。 问题是Windows识别连接来自ActiveX控件,并显示此警告:
此警告很难在服务器上自动连接。
注意:“网站正在尝试启动远程连接”,而我正在使用可执行文件执行此操作... 我在互联网上阅读了这条消息,并在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;
答案 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