1

私のアプリケーションはサードパーティのdllを使用しています。myapp.exe.localアプリケーションディレクトリと、登録またはsystem32ディレクトリにある異なるバージョンの同じdllを使用するアプリケーションを削除した場合、アプリケーションは正常に実行されますか?どのdllが使用されますか?

そして、どのディレクトリが優先されますか?ローカルアプリケーションディレクトリまたは登録済みまたはsystem32?

4

1 に答える 1

2

app.exe.localファイルは、COMサーバーのDLL地獄の問題を解決します。DLLの場所を指定するレジストリ内のキーがあります。そのキーは、コクラスのCLSIDであるGUIDを介して検出されます。HKLM \ Software \ Classes\CLSIDにはGUIDが含まれています。

COMの厳しい要件は、サーバーのコードに重大な変更を加えるときにGUIDを変更する必要があることです。ただし、これはスキップされることがよくあります。GUIDを変更するには、コンポーネントを使用するアプリを再コンパイルする必要があるため、問題が発生します。または、変更はバグ修正であり、破損していないことを意味していましたが、それでも別のアプリで問題が発生します。

app.exe.localファイルを使用すると、レジストリで指定されたパスを無視して、EXEと同じフォルダに保存されているDLLを常にCOMにロードさせることができます。したがって、レジストリで指定できるDLLのバージョンが1つしかない場合でも、アプリで異なるバージョンのDLLを使用できるようにします。したがって、そのファイルを削除すると、すぐにアプリが破損するか、別のアプリがDLLを更新したときにDLL地獄に陥る可能性が高くなります。

MSDNの記事はこちらです。それのグーグルキャッシュはここにあります、MSDNは最近かなりボルケンされています。

于 2012-06-13T07:23:56.313 に答える