【问题标题】:Dll And Exe.local File in vb.netvb.net 中的 Dll 和 Exe.local 文件
【发布时间】:2012-06-13 05:43:22
【问题描述】:

我的应用程序使用第 3 方 dll。如果我从我的应用程序目录中删除myapp.exe.local 文件,并且某些应用程序将使用不同版本的相同 dll 将被注册或在 system32 目录中,我的应用程序会成功运行吗?将使用哪个 dll?

以及哪个目录将获得偏好 - 本地应用程序目录或已注册或 system32?

【问题讨论】:

标签: .net vb.net


【解决方案1】:

app.exe.local 文件解决了 COM 服务器的 DLL Hell 问题。其中在注册表中有一个键,指定 DLL 的位置。该密钥是通过一个 guid,即 coclass 的 CLSID 找到的。 HKLM\Software\Classes\CLSID 包含 guid。

COM 的一个硬性要求是,当您对服务器代码进行重大更改时,必须更改 guid。然而,这经常被跳过,它会导致痛苦,因为更改 guid 还需要重新编译使用该组件的应用程序。或者该更改旨在修复错误,不会造成破坏,但仍会导致另一个应用出现问题。

通过使用 app.exe.local 文件,您可以强制 COM 始终加载与 EXE 存储在同一文件夹中的 DLL,忽略注册表中指定的路径。因此允许应用程序拥有不同版本的 DLL,即使注册表只能指定一个。因此,如果您删除该文件,您很有可能会立即破坏该应用程序,或者在另一个应用程序更新 DLL 时遭受 DLL Hell。

MSDN 文章is here。谷歌缓存了它is here,MSDN 最近很烂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多