1

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

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

4

1 回答 1

2

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 文章在这里。它的谷歌缓存在这里,MSDN 最近很糟糕。

于 2012-06-13T07:23:56.313 回答