私は他のプロセスに注入されたCBTフックを持っています。このCBTフックはC++/CLI DLLで記述され、C#DLLを参照します。このC#DLLには、C++/CLI DLLのx86およびx64ビルドに共通のタイプが含まれているため、必要です。しかし、今ではCBTフックが動作せず、C#DLLが見つからないと主張しています。これにより、CBTフックで注入されたすべてのプログラムが直前にクラッシュするようになります。CBTフック内の複数のDLL
BinaryFormatter
と名前付きパイプを使用してフックプロシージャからデータを元のプロセスに戻すために、シリアライゼーションを支援するために共通タイプをC#DLLに移動しました。注入されるプロセスのアドレス空間。
私の質問は、C#DLLが実行時にフックプロシージャによって検出されるようにするにはどうすればいいですか? C#DLLとC++/CLI DLLは同じディレクトリにあります。
例外:型 'System.IO.FileNotFoundException' の未処理の例外がIvyLock.Native.dll で発生した
追加情報(これは私のC++/CLIのDLLのx86の変異体である):でしたファイルまたはアセンブリ 'IvyLock、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = ...'またはその依存関係のいずれかをロードしないでください。システムは、指定されたファイルを見つけることができません。 これはIvyLock.Native.dllと同じディレクトリにある私のC#のDLLである
注:すべては、私は単純に夢中にされているプロセスと同じディレクトリにIvyLock.dllをコピーする場合は完璧に動作しますが、これを明らかにグローバルフックにスケーラブルではないので、このアプリケーションが正しく機能するには、クロスアーキテクチャのグローバルフックが必要です。私は、IvyLock.dllが検索されるパスを変更することで問題は緩和されると推測していますが、どうすればよいですか?
注2:GACにIvyLock.dllを追加も、問題を解決して、はるかにスケーラブルですが、それは管理者のアクセスを必要としても、潜在的に難しい展開する、と私はIvyLockを更新するたびに行うための痛みです.dll。可能であれば、この解決策を避けたいと思います。
(プロジェクトのプロパティで設定可能な)IvyLock.dllを遅延ロードするように設定した場合、問題を解決できるはずの絶対パスを使用してLoadLibraryします。 – xanatos
ここでの問題はdll1のパスではなく、app1、dll1、dll2のdll1にdll2をロードすると、検索パスはapp1のパスになります。 – xanatos
待機中...エラー... .NETアセンブリの読み込みをリダイレクトしたい... http://stackoverflow.com/a/1373295/613130を使用してください(イベント 'AppDomain.CurrentDomain.AssemblyResolve'を使用してください)。 )。あなたがC++(純粋な)ソリューションを持っていて、C++/CLIアセンブリ – xanatos