私はdll COMコンポーネントとしてビルドし、installshieldLEを使用してインストールするWPFアプリケーションを用意していますが、COMクライアントを実行するといくつかの依存DLLでいくつか問題があります。COMアプリケーションはdllを参照してDLLを参照しています
私のWPF dllは、同じVS2012ソリューション内に存在する2つの他のC#dll(A & B)を参照しています。
私のWPF dllには、COM相互運用オプションのチェックボックスがチェックされており、WPF GUIアプリケーションを実行するためのCOMインターフェイスが用意されています。
私はWPFアプリケーションをテストするC COMクライアントプログラムを持っています。私が抱えている問題は、アプリケーションが正常に動作するためには、クライアントプログラムのフォルダにdll_Aの参照されているdll(サードパーティのグラフィックパッケージ)の一部を含める必要があることです。ローカルのクライアントディレクトリにdll_Aまたはdll_Bを含める必要はありません。
また、COMサーバーdllによって参照され、クライアントディレクトリに存在する必要がないインストールに含まれる他の(C)dllがあるため、これは理解しにくいものです。
これはWPFの質問ではなく、他の参照されているアセンブリに関連するcomサーバーのインストールに関する質問です。
メインのDLLに、&bのdllとメインのCOM DLLがインストール先から実行されていることを確認するデバッグメッセージが出力されました。しかし、サードパーティのDLLがローカルのクライアントフォルダにないときには、さらに例外が発生します。
この問題のトラブルシューティングをお手伝いできますか。インストール場所からクライアントプログラムを正常に実行できるので、必要なアセンブリとDLLがすべて存在することが確実です。
ありがとうございました。
はい、正しいです。私はSetDllDirectory関数を調べます。あなたのご意見ありがとうございます。 – user5265160
@ user5265160:AddDllDirectory/RemoveDllDirectoryはSetDllDirectoryより優れています。回答が更新されました。 –
フィードバックいただきありがとうございます。これは知るのに便利です。私の問題はCOM/.Netに関連していました。依存するdllの1つは.Net 4.0を使用してコンパイルされましたが、その他は.Net 4.0クライアント版を使用してコンパイルされていました。これは、依存するdllがCOMクライアントと同じディレクトリにあるが、COMサーバーdllに入っているときはそうではないようです。 – user5265160