vb.net中的Dll和Exe.local文件

时间:2012-06-13 05:43:23

标签: .net vb.net

我的应用程序使用第三方dll。如果我从我的应用程序目录中删除myapp.exe.local文件,并且某个使用相同dll的应用程序将使用不同版本的寄存器或在system32目录中,我的应用程序是否会成功运行?将使用哪个DLL?

哪个目录会获得首选项 - 本地应用程序目录或已注册或system32?

1 个答案:

答案 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地狱的影响。

MSDN文章is here。它的谷歌缓存is here,MSDN最近已经很好了。