リモートオートメーションの実装方法をご教授下さい

[戻る]
STSK [HomePage] 2006/12/01(金) 20:05:17
現在VS2005(VC++)にて、以下の構成でのプロセス間通信を実装しようとしています。

            通信
  PC1 <-----------------------------------> PC2 ActiveX.EXE(2)
    <-----------------------------------> PC3 ActiveX.EXE(3)
   ActiveX.EXE(1)

 ・ActiveX.EXE(1)がリモートオートメーションにてActiveX.EXE(2)と
  ActiveX.EXE(3)を起動する。
 ・ActiveX.EXE(2)とActiveX.EXE(3)は同じ実行ファイル。

これを実装する為に、とりあえずローカルPC内にて、ActiveX.EXE(1)が
ActiveX.EXE(2)を起動する事を確認しました。

  コードイメージ(ActiveX.EXE(1)):
    // ---------------------------------------------------------------
    // 接続
    tSvr1.CreateDispatch( _T( "Server2.Application" ), NULL );
    // データ設定
    tSvr1.SetData( nData );
    // データ取得
    tSvr1.GetData( &nData );
    // 切断
    tSvr1.ReleaseDispatch();
    // ---------------------------------------------------------------

そこで、ActiveX.EXE(2)をリモートPCに移動してみようと思ったのですが…
どのようにしてレジストリ登録すれば良いのかが分かりません。
(ローカル時はActiveX.EXE(2)を1回コールし、レジストリ登録しました)

Microsoftのページにて、オートメーションマネージャなる管理ツールが
存在するように見えるのですが、VS2005のインストールフォルダにも
インストールDVD内にも存在しないようです。
  http://msdn2.microsoft.com/ja-jp/library/khas5xda(VS.80).aspx

方法をご存知の方がいらっしゃいましたら、ご教授下さい。

また、ActiveX.EXE(2)とActiveX.EXE(3)は同じプロセスですので、
『どちらのPCのEXEに接続する』といった指定が出来る必要があるのですが、
CreateDispatch()にはそのような引数が見当たりません。

DCOM(ATL)でしたら、COMライブラリのインスタンス生成時(CoCreateInstanceEx())に
サーバ名を渡す等のカスタマイズが出来るのですが、ActiveX.EXEの場合は
どう指定をすれば良いのでしょうか?

長文で申し訳ありません。
宜しくお願い致します。

STSK [HomePage] 2006/12/07(木) 02:24:01
[[解決]]
自己レスです。

CreateDispatch()のソースをトレースした所、中でCoCreateInstance()を
コールしていました。つまり、PCの指定は出来ないようです。

dcomcnfgコマンドで該当のCOMのプロパティを参照し、起動先のサーバを
指定しておけば、CreateDispatch()でもリモートExeへのアクセスが
可能になる気がします。(未検証)

接続先のPCが動的に変わるアプリケーションの場合(今回ワタシが作って
いるのもコレ)、CoCreateInstanceEx()により接続を行う必要がありそうです。

オートメーションマネージャについては、調査未です。
…が、オートメーションといっても中身はCOMなので、DCOMサーバが
動いてさえいれば、特に気にしなくて良さそうです。

 ※情報がありましたら、コメントをお願いします。

ひとまず解決とさせて頂きます。

古いスレッドには追加発言できません。