我的产品包含两个dlls (为了清晰起见,分别是A.dll和B.dll ),A.dll依赖于B.dll。A和B的dll都在同一个文件夹中(比如c:\app)。同时,旧版本的B.dll位于WindowsSystem32文件夹中。当我尝试从命令提示符运行以下命令时(当前文件夹为c:\app):
rundll32.exe "c:\app\A.dll",DoWork
我收到错误,因为rundll32使用System32文件夹中的旧版本B.dll。我尝试使用SetDllDirectory库的DllMain函数中的A.dll API将c:\app文件夹添加到搜索路径中,但对我不起作用。
我找不到任何关于rundll32内部结构的有用和完整的信息,也找不到任何关于dll加载顺序的信息。
在此部署配置中是否可以成功执行rundll32?(我的意思是从c:\ B.dll文件夹加载新的应用程序版本)。
发布于 2009-09-10 07:51:37
DLL地狱在SO上
嗯,从一种复古的角度来说,这很酷。这里有一个想法:尝试将rundll32.exe复制到与新dll和您的产品相同的文件夹中,并从那里运行它。也许能行得通..。
发布于 2009-09-10 07:50:01
我会删除旧的Dll,或者为新的dll使用另一个名称。有两个版本的东西应该做同样的事情,并给它相同的名称,可能会造成严重破坏。
https://stackoverflow.com/questions/1403873
复制相似问题