私のアプリケーションはサードパーティのdllを使用しています。myapp.exe.local
アプリケーションディレクトリと、登録またはsystem32ディレクトリにある異なるバージョンの同じdllを使用するアプリケーションを削除した場合、アプリケーションは正常に実行されますか?どのdllが使用されますか?
そして、どのディレクトリが優先されますか?ローカルアプリケーションディレクトリまたは登録済みまたはsystem32?
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地獄に陥る可能性が高くなります。