3

假设我有一个使用 MSHTML 的应用程序。安装 IE9 beta 会更新 MSHTML,这会破坏我的应用程序。我发现 IE8 dll 的副本仍然存在于 WinSxS 文件夹中,所以也许我可以在不重新编译程序的情况下以某种方式使用它们?WinSxS 能做到吗?

我已经搜索了很长时间,但无法弄清楚如何重定向加载程序以使用 IE8 MSHTML(在 WinSXS 中)而不是 IE9(在 %SYSTEMROOT%\system32 中)。任何想法/示例将不胜感激。

4

2 回答 2

1

从那以后,我对这个问题采取了不同的方法。我将分享我最终所做的事情——我劫持LoadLibrary并加载我想要的任何 DLL:DLL 文件通过 manifest 的 DLL 重定向加载了两次

要回答问题的具体标题(“使用 WinSxS 清单重定向”),我会根据我与 WinSxS 的长期斗争回答“不,你不能”(如果你不同意,请投反对票,我会很高兴看看如何做到这一点。)

于 2011-05-05T02:16:28.323 回答
1

您绝对不能使用 WinSxS 清单或策略重定向来强制加载不同版本的操作系统组件。虽然 os 组件也存储在 WinSxS 存储中,但它们不能作为 sxs 程序集绑定,因此这种重定向是不可能的。

到处乱搞重定向 LoadLibrary 并强制加载旧版本的 mshtml(或任何其他 OS DLL)是一个非常糟糕的主意,我强烈建议不要这样做。原因包括旧的 DLL 可能不会出现在所有安装中,您不太可能正确挂钩所有加载路径(并因此创建一个奇怪的混合),当然,像 MSHTML 这样的东西是为特定的方式和任何其他用途都可能在以后导致问题 - 特别是在 HTML 等安全敏感的内容中。

马丁

于 2011-05-05T05:16:02.143 回答