3

MSHTML を使用するアプリケーションがあるとします。IE9 ベータ版をインストールすると MSHTML が更新され、アプリケーションが壊れます。IE8 dll のコピーがまだ WinSxS フォルダーに存在することがわかったので、プログラムを再コンパイルせずにそれらを使用できるのではないでしょうか? WinSxSでできますか?

長い間検索しましたが、IE9 (%SYSTEMROOT%\system32 にあります) の代わりに IE8 MSHTML (WinSXS にあります) を使用するようにローダーをリダイレクトする方法がわかりませんでした。任意のアイデア/例をいただければ幸いです。

4

2 に答える 2

1

WinSxSマニフェストまたはポリシーリダイレクトを使用して、異なるバージョンのOSコンポーネントを強制的にロードすることは絶対にできません。osコンポーネントもWinSxSストアに格納されますが、sxsアセンブリとしてバインドできないため、この種のリダイレクトはできません。

LoadLibraryをリダイレクトし、古いバージョンのmshtml(または他のOS DLL)を強制的にロードすることは非常に悪い考えであり、私はそれを強くお勧めします。理由には、古いDLLがすべてのインストールに存在しない可能性がある、すべての読み込みパスを正しくフックする可能性が低い(したがって、奇妙なハイブリッドを作成する)可能性が低い、そしてもちろん、MSHTMLのようなものが特定の場所で使用するように設計されているという事実が含まれます方法やその他の使用法は、後で問題を引き起こす可能性があります-特にHTMLのようなセキュリティに敏感なものでは。

マーティン

于 2011-05-05T05:16:02.143 に答える
1

それ以来、私はこの問題に対して別のアプローチをとってきました。私が最終的に行ったことを共有します-LoadLibrary必要なDLLをハイジャックしてロードします.DLLファイルは、マニフェストを介したDLLリダイレクトで2回ロードされました

質問の特定のタイトル (「WinSxS マニフェストを使用してリダイレクトする」) に答えるには、WinSxS との長年の戦いに基づいて、「いいえ、できません」と答えます (同意しない場合は反対票を投じてください。それがどのようにできるかを見るために。)

于 2011-05-05T02:16:28.323 に答える