假设我有一个使用MSHTML的应用程序。安装MSHTML版会更新IE9,这会破坏我的应用程序。我发现IE8 dll的副本仍然存在于WinSxS文件夹中,所以也许我可以在不重新编译程序的情况下以某种方式使用它们?WinSxS能做到吗?
我寻找了很长一段时间,但不知道如何将加载器重定向为使用SYSTEMROOT(在WinSXS中)而不是IE9 (在%SYSTEMROOT%\System32中)。任何想法/例子都将不胜感激。
发布于 2011-05-05 10:16:28
从那以后,我采用了一种不同的方法来解决这个问题。我将分享我最终所做的事情--我劫持LoadLibrary并加载我想要的任何DLL:DLL file loaded twice with DLL redirection through manifest。
为了回答这个问题的具体标题(“使用WinSxS清单重定向”),基于我与WinSxS的长期斗争,我将回答“不,你不能”(如果你不同意,我很乐意看看如何做到这一点)。
发布于 2011-05-05 13:16:02
您绝对不能使用WinSxS清单或策略重定向来强制加载不同版本的操作系统组件。虽然os组件也存储在WinSxS存储中,但它们不能作为sxs程序集绑定,因此这种重定向是不可能的。
摸着石头过河地重定向LoadLibrary并强制加载旧版本的mshtml (或任何其他older )是一个非常糟糕的主意,我强烈建议您不要这么做。原因包括:较旧的DLL可能不会出现在所有安装中,您不太可能正确地挂接所有的加载路径(从而创建一个奇怪的混合),当然,像MSHTML这样的东西被设计为以特定的方式使用,任何其他使用都可能导致以后的问题-特别是在诸如HTML这样的安全敏感的东西中。
马丁
https://stackoverflow.com/questions/4989152
复制相似问题