これが私の仕事です:
- 実行中のマネージド WPF アプリケーションにカスタム マネージド コードを挿入します (つまり、私のコードは他の AppDomain で実行する必要があります)。
- 挿入されたコードは UI スレッドで実行する必要があります
私が「最高」と言うとき、私は次のことを意味します:
- 注入プロセスは可能な限り安定している必要があります (スレッドのデッドロックなどはありません)。
- コードは x86 および x64 プラットフォームで問題なく動作するはずです (特に Vista x64 では)。
最小限のユースケース
- 実行中の WPF プログラムを選択
- カスタム コードを挿入する
- コードを挿入すると、ターゲット プロセスのメイン ウィンドウのタイトルが「コードが挿入されました」に変わります。
私が評価しているソリューション:
1) Windows フックを介したインジェクション ( Snoopなど)
長所:
- 挿入されたコードは UI スレッドで実行されます
短所:
- 混合 (c++/cli) 外部 dll が必要
- デバッグが難しい
2) EasyHookライブラリによるインジェクション
長所:
- ライブラリは堅実で十分にテストされているように見えます
短所:
- UI スレッドでコードを実行する方法が見つかりませんでした
- インジェクション ライブラリに署名して GAC にインストールする必要があります
3) WriteProcessMemory/CreateRemoteThreadEx/LoadLibrary によるインジェクション
長所:
- 単純
短所:
- 非常に不安定 (コードは DllMain で実行する必要がある、CLR ホスティングが必要など)
方法 1 を使用します。より良いアプローチをお勧めできますか?
アンマネージ DLL での CLR ホスティングに基づく適切な手法はありますか?
私はこれらの質問を認識していることに注意してください: