2015-11-13 94 views
2

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

enter image description here

此警告使得难以在服务器上自动连接。

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

我的应用程序进行编码德尔福,我在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

明白了。而不是使用“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; 
0

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

微软RDP客户端控件 - 10版

代替:

微软RDP客户端控件(可再发行) - 版本10

这会给你“不安全的脚本”版本9(sic!)控件l型号:

AxMSTSCLib.AxMsRdpClient9NotSafeForScripting