|
分類:[VB.NET/VB2005 以降]
こんにちは。初めての質問になります。よろしくお願いします。
<環境> 新開発環境:VisualStudio 2010 VB.NET 4.0 旧開発環境:VisualBasic6 新OS:クライアント Windows7 32bit サーバー:Windows Server 2008 R2 64bit 旧OS:クライアント Windows XP 32bit サーバー:Windows Server 2003 32bit?
現在VB6のシステムをVB.NETに移行する案件を作業しています。 システムの中に以下の様なものがあります。
プログラムA(クライアントで実行するEXE) 「Dim objB as Object = CreateObject( "B.Class", "サーバーIP" )」とBのクラスインスタンスを作成している。
プログラムB(サーバーでCOM登録するEXE) 「B.Class」というクラスを定義している。 実行ファイルをサーバーに配置して「B.EXE /REGSERVER」で登録する(旧環境導入手順ドキュメントより)
IP指定する処理は今まで知らなかった手法なので調べるとDCOMというものと分かり ひとまずB.EXEをVB.NETで作成し、COM登録として「B.EXE /REGSERVER」を実行したのですが 何もエラーは出ていないのですが「dcomcnfg」でDCOM一覧を見ても何も追加されておりませんでした。
エラーもないので手探りで色々と不明瞭な点を調べている状態なのですが どういう方向で調べればいいのか分からないためご知恵をお貸し頂きたいです。 聞きたい内容を以下に列挙します。十分な調査ができているとは言えないので、質問自体がおかしい場合はご指摘いただければと思います。
1.VB.NETで作成したEXEを「B.EXE /REGSERVER」で登録するという事自体間違いなのでしょうか? 調査中「RCW(Runtime Callable Wrapper)」というラッパーを用いるという記事を見たのですが COM登録した後呼び出しに用いるという認識で、そもそもCOM登録するのかしないのかがよく分かりませんでした。
2.「B.EXE /REGSERVER」を実行したものはコンポーネントサービスの「DCOMの構成」一覧に表示されると思っているのですが、それが誤りなのでしょうか?
3.2が認識あっている場合、登録失敗したならエラー内容を知りたいのですが 現状ではエンターキーを押すと何もメッセージが出ません。何か表示する方法があるのでしょうか?
<補足> ・CreateObjectの第二引数を空にしてA.EXEとB.EXEを同一の場所に出力してA.EXEを実行するとB.Classインスタンスは正常に作成出来ます。 定義した関数の中の処理も正常に動作します。
・出力しているプロセスは全て32bitで出力しています。
・コマンドプロンプトを実行する際は「管理者権限で実行」から起動しています。
・Bで実行しているのはDBアクセス、画像処理程度なのですが画像処理周りのがボリュームが大きいため、出来ればC++などに置き換えないで済むのが理想です。
・BをDCOM登録しているのはクライアントへの負荷を減らすためだと思うのですがリプレイス後も同様の構造にしたいようです。
ご不明な点等ありましたら、ご指摘お願いします。以上です。
|