2015-11-13 90 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