我的应用程序使用第三方dll。如果我从我的应用程序目录中删除myapp.exe.local
文件,并且某个使用相同dll的应用程序将使用不同版本的寄存器或在system32目录中,我的应用程序是否会成功运行?将使用哪个DLL?
哪个目录会获得首选项 - 本地应用程序目录或已注册或system32?
答案 0 :(得分:2)
app.exe.local文件解决了COM服务器的DLL Hell问题。其中有一个注册表中的键,用于指定DLL的位置。该密钥是通过一个guid,即coclass的CLSID找到的。 HKLM \ Software \ Classes \ CLSID包含guids。
对COM的一个硬性要求是,当您对服务器的代码进行重大更改时,必须更改guid。然而,这经常被跳过,它会导致痛苦,因为更改guid还需要重新编译使用该组件的应用程序。或者,更改意味着修复错误,不会破坏,但仍然会导致另一个应用程序出现问题。
通过使用app.exe.local文件,您强制COM始终加载存储在与EXE相同的文件夹中的DLL,忽略注册表中指定的路径。因此,允许应用程序具有不同的版本的DLL,即使注册表只能指定一个。因此,如果您删除该文件,那么当您的另一个应用程序更新DLL时,您可能会立即破解应用程序或受到DLL地狱的影响。