2017-07-06 10 views
1

C#/ .NETプログラムは、ターゲットフォルダ内でサードパーティDLL(x.dll)を呼び出しています。 x.dllは同じフォルダ内の別のサードパーティのDLL y.dllを呼び出しています。いくつかのシステムでは、x.dllがy.dllを見つけることができないため、これは機能しません。 同じdllを持つ同じプログラムが他のほとんどのシステムで動作しますが、動作しないシステムとの違いはわかりません。私たちはプロパティをチェックし、dllはWindowsによってブロックされません。また、ウイルススキャナは無効になっていました。一部のシステムではDLLにアクセスできない

+2

どのような.netバージョンですか? x86とx64の違いは? –

+1

ProcessMonitorを使用して、2つのシステムからのトレースを比較し、それらが異なる場所と理由を確認します –

答えて

1

Dynamic-Link Library Search Orderまでお進みください。最も可能性が高い場合はSafeDllSearchModeと標準DLLの検索順序が有効になっている:

をSafeDllSearchModeが有効になっている場合は、次のように、検索順序は次のとおりです。

  • アプリケーションがロードされたディレクトリ。
  • システムディレクトリ。このディレクトリのパスを取得するには、GetSystemDirectory関数を使用します。
  • 16ビットのシステムディレクトリ。このディレクトリのパスを取得する機能はありませんが、検索されます。
  • Windowsディレクトリ。このディレクトリのパスを取得するには、GetWindowsDirectory関数を使用します。
  • 現在のディレクトリ。
  • PATH環境変数にリストされているディレクトリ。これには、 App Pathsレジストリキーで指定されたアプリケーションごとのパスは含まれません。 DLL検索パスを計算する場合、App Pathsキーは使用されません。

DLLは、マネージアセンブリである場合ことに注意してください(あなたがそれを言及していないです)その後、.NETアセンブリの検索規則が適用され、How the Runtime Locates Assembliesを参照してください。明らかに、GACはマネージドDLLの役割も果たします。

あなたの投稿に関連情報がないため、あなた自身の調査をするための指針を与えるだけです。

関連する問題