Как использовать WinSxS манифесты для перенаправления на более старую версию DLL? - PullRequest
3 голосов
/ 14 февраля 2011

Допустим, у меня есть приложение, которое использует MSHTML. Установка бета-версии IE9 обновит MSHTML, что приведет к поломке моего приложения. Я обнаружил, что копии DLL IE8 все еще присутствуют в папке WinSxS, так что, может быть, я могу как-то использовать их без перекомпиляции моей программы? Может ли WinSxS это сделать?

Я долго искал, но не мог понять, как перенаправить загрузчик, чтобы использовать IE8 MSHTML (который находится в WinSXS) вместо IE9 (который находится в% SYSTEMROOT% \ system32). Любые идеи / примеры будут оценены.

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Вы определенно не можете использовать манифесты WinSxS или перенаправление политики для принудительной загрузки различных версий компонентов ОС. Хотя компоненты os также хранятся в хранилище WinSxS, они не могут быть привязаны как сборки sxs, поэтому перенаправление такого типа невозможно.

Тратить время на перенаправление LoadLibrary и принудительную загрузку более старой версии mshtml (или любой другой библиотеки ОС) - очень плохая идея, и я настоятельно рекомендую против нее. Причины включают тот факт, что старая DLL может присутствовать не во всех установках, что вы вряд ли правильно подключите все пути загрузки (и, следовательно, создадите странный гибрид), и, конечно, такие вещи, как MSHTML, предназначены для использования в определенных и любое другое использование может привести к проблемам позже - особенно в таких важных для безопасности вещах, как HTML.

Martyn

1 голос
/ 05 мая 2011

С тех пор я пошел с другим подходом к этой проблеме.Я поделюсь тем, что в конце концов сделал - перехватываю LoadLibrary и загружаю любую DLL, какую захочу: Файл DLL загружается дважды с перенаправлением DLL через манифест .

Чтобы ответить на конкретный заголовокна вопрос (« используйте WinSxS-манифесты для перенаправления »), я отвечу «Нет, вы не можете», основываясь на моей давней битве с WinSxS (понизить, если вы не согласны, я буду счастливчтобы увидеть, как это можно сделать.)

...