2

Windowsフォームanfを使用してRDPクライアントを作成しようとしていますAxMsTscAxNotSafeForScripting

私は次の方法を持っています:

_rdpList = new List<AxMsTscAxNotSafeForScripting>();


public bool addRDP(string ip, string username, string pass)
    {
        for (int i = 0; i < number ; i++)
        {

            if (_rdpList[i].Connected.ToString() != "1")
            {
                try
                {
                    _rdpList[i].Server = ip;
                    _rdpList[i].UserName = username;



                    IMsTscNonScriptable secured = (IMsTscNonScriptable) _rdpList[i].GetOcx());
                    secured.ClearTextPassword = pass;
                    _rdpList[i].Connect();
                    _picList[int.Parse(_rdpList[i].Name)].ImageLocation = greenPath;
                    return true;

                }
                catch (Exception Ex)
                {
                    MessageBox.Show("Error Connecting", "Error connecting to remote desktop " + ip + " Error:  " + Ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

私はスレッドからこのメソッドを呼び出し、それが実行しようとすると:IMsTscNonScriptable secured = (IMsTscNonScriptable) _rdpList[i].GetOcx());

次のエラーで失敗します:

タイプ'System.__ComObject'のCOMオブジェクトをインターフェイスタイプ'MSTSCLib.IMsTscNonScriptable'にキャストできません。次のエラーが原因で、IID'{C1E6743A-41C1-4A74-832A-0DD06C1C7A0E}'のインターフェイスのCOMコンポーネントに対するQueryInterface呼び出しが失敗したため、この操作は失敗しました。このようなインターフェイスはサポートされていません(HRESULTからの例外:0x80004002(E_NOINTERFACE)) 。

私は一日中それに取り組んでいますが、問題を理解できませんでしたか?

奇妙なことに、Windowsフォームイベント(ボタンクリックなど)からこのメソッドを呼び出すと、このメソッドが正常に機能するたびに、WCFサービスからこのメソッドを呼び出すときにのみ問題が発生します。

助けてください。

4

2 に答える 2

2

コードを置き換えます:

IMsTscNonScriptable secured = (IMsTscNonScriptable) _rdpList[i].GetOcx());
secured.ClearTextPassword = pass;

と:

_rdpList[i].AdvancedSettings2.ClearTextPassword = pass;

注:AdvancedSettings2がオブジェクト_rdpList [i]で使用できない場合は、MSTSCLibへの参照を削除して、再度追加してください。

于 2016-08-07T14:02:10.467 に答える
1

おそらくたくさんの解決策がありますが、私の意見では、dynamicここで使用するのが最も簡単です。私の知る限り、それが彼らがdynamicキーワードを作成した理由の一部です。インターフェイスを知っている限り、キャストを気にすることなくこれを使用できます。インテリセンスは失われますが、COMで髪を抜く手間を省くことができます

動的に関するいくつかのドキュメント

コードは次のようになります。

dynamic secured = _rdpList[i].GetOcx());
于 2012-05-03T01:10:29.307 に答える