現在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の場合は
どう指定をすれば良いのでしょうか?
長文で申し訳ありません。
宜しくお願い致します。
自己レスです。
CreateDispatch()のソースをトレースした所、中でCoCreateInstance()を
コールしていました。つまり、PCの指定は出来ないようです。
dcomcnfgコマンドで該当のCOMのプロパティを参照し、起動先のサーバを
指定しておけば、CreateDispatch()でもリモートExeへのアクセスが
可能になる気がします。(未検証)
接続先のPCが動的に変わるアプリケーションの場合(今回ワタシが作って
いるのもコレ)、CoCreateInstanceEx()により接続を行う必要がありそうです。
オートメーションマネージャについては、調査未です。
…が、オートメーションといっても中身はCOMなので、DCOMサーバが
動いてさえいれば、特に気にしなくて良さそうです。
※情報がありましたら、コメントをお願いします。
ひとまず解決とさせて頂きます。