2012-01-11 7 views
0

私は既存のプログラムの拡張機能を意図したアプリケーションをコーディングしました。しかし、上記のプログラムでは、拡張機能やプラグインを読み込むための方法や、あなたが呼び出すものは許可していません。この理由から、私はC++ DLLを注入して夢中になっていく可能性を考えてきましたが、マネージドC#の全体をやることにもっと興味があります。両方のアプリケーションを同じAppDomainにロードすると、別のマネージアプリケーションと対話できますか?

ターゲットプログラムと自分自身のプログラムの両方がC#で書かれているため、管理されています。今、自分のプロジェクトでターゲットプログラムへの参照を設定した場合、Visual Studioエディタでそのプロパティ、フィールドなどにアクセスすることができますが、実際には "実際に"得ることはできません私はターゲットプログラムをメンバーの読み込み時に実行することができないため、実際のデータを得ることはできません。

私の考えは、AppDomainを設定するターゲットプロセスにDLL(C++、しかしこれは唯一のC++部分)を注入するランチャーを作成する場合、 AppDomainを実行してから、同じプロセスとAppDomainにプログラムをロードすると、ターゲットプログラムの「リアルタイム」値にアクセスできますか?

私はこれが長いショットであることを知っています。実際にこれをテストするには、数週間のコーディングでなければ数日かかるでしょう。それが私がここで尋ねる理由です。おそらくそれはあまりにも非正統的で遠いものですが、実際にはこれがうまくいく可能性があります。理論的には。

そこで、ビット簡素化:ターゲット・プロセスにを注入DLLを - >アプリケーションドメインを作成 - >アプリケーションドメインに配置ホストプロセス - >アクセス対象プロセスメソッドとプロパティ

+1

ステップをスキップしました。「あなたのプログラム」はどのように実行されましたか?なぜあなたのコードが呼び出されるのですか? –

+0

他のアプリの静的main(string [] args)メソッドを呼び出す小さなアプリケーションを作成し、GCとリフレクションを介して参照をオーバーライドするスレッドを起動する方法を試しましたか? –

+0

@JohnSaunders私のネイティブDLLはアプリケーションをロードして実行しますが、その部分は私の思うようなボトルネックにはなりません。そしてDanny Varod、私はそうではありませんでしたが、私はそれを見ていきます。ありがとう! – aevitas

答えて

1
- >ロードmyprogram.exeというプロセスとアプリケーションドメインに

あなたが本当にやりたいことを理解しているのか分かりませんが、アプリケーションと同じマシン上で動作する別のアプリケーションとの間でデータを交換するのであれば、IPCを使用してWCF通信を使用しないでくださいバインディング(NetNamedPipeBindingクラスで提供)。私はこれがあなたの提案された解決策よりもはるかに合理的で、維持してテストするのが簡単だと信じています。

関連する問題