2011-02-14 5 views
3

MSHTML을 사용하는 응용 프로그램이 있다고 가정 해 보겠습니다. IE9 베타를 설치하면 MSHTML이 업데이트되어 응용 프로그램이 손상됩니다. IE8 dll의 복사본이 WinSxS 폴더에 여전히 존재한다는 것을 알았습니다. 프로그램을 다시 컴파일하지 않고도 사용할 수 있습니다. WinSxS로 할 수 있습니까?WinSxS 매니페스트를 사용하여 DLL의 이전 버전으로 리디렉션하는 방법?

오랫동안 검색했지만 IE9 (% SYSTEMROOT % \ system32에 있음) 대신 IE8 MSHTML (WinSXS에 있음)을 사용하도록 로더를 리디렉션하는 방법을 알아 내지 못했습니다. 모든 아이디어/예를 들어 주시면 감사하겠습니다.

+2

시도한 것에 대한 정보를 추가 할 수 있습니까? 예를 들어 응용 프로그램에 매니페스트를 추가하려고 시도 했습니까? 여기에 설명 된 것과 같습니다 : http://stackoverflow.com/questions/1381028/winsxs-how-to-take-dependency-on-specific-version-of-gdiplus-dll –

+0

애플리케이션에 매니페스트가 있습니까? 보여줄 수 있습니까? 응용 프로그램이 매니페스트의 종속성을 선언하면 system32에서 DLL을로드하지 않고 WinSxS에서 DLL을로드합니다. –

+0

예, 나는 매니 페스트를 시험해 보았고 나는 그들에 관해 할 수있는 모든 것을 시도했습니다. 그럼에도 불구하고 나는 다른 접근법을 시도했다. (아래 내 대답을 보라). – kizzx2

답변

1

나는이 문제에 대한 다른 접근 방식을 생각해 봤다. 나는 결국 내가 한 일을 공유 할 것이다. 나는 LoadLibrary을 납치하고 내가 원하는 DLL을로드한다 : DLL file loaded twice with DLL redirection through manifest.

이 질문의 특정 제목에 대답하기 위해 나는 "아니, 당신은 할 수 없습니다"당신이 동의하지 않는 경우 WinSxS에 (downvote 내 오랜 시간 전투를 기반으로 답변 해 드리겠습니다, (" 사용 WinSxS에이을 리디렉션 명단") 그 방법을 알게되어 기쁩니다.)

1

WinSxS 매니페스트 나 정책 리디렉션을 사용하여 다른 버전의 OS 구성 요소를 강제로로드 할 수 없습니다. os 구성 요소는 WinSxS 저장소에도 저장되지만 sxs 어셈블리로 바인드 할 수 없으므로 이러한 종류의 리디렉션은 불가능합니다.

LoadLibrary를 리디렉션하고 이전 버전의 mshtml (또는 다른 OS DLL)을 강제로드하는 것은 매우 나쁜 생각이므로 반대하는 것이 좋습니다. 이유는 이전 DLL이 모든 설치에 존재하지 않을 수도 있고 모든 로딩 경로를 올바르게 후킹 할 수 없으므로 이상한 하이브리드를 생성 할 수 있다는 것입니다. 물론 MSHTML과 같은 것들은 특정 설치 환경에서 사용하도록 설계되었습니다. 그리고 다른 용도로 사용하면 나중에 HTML과 같은 보안에 민감한 부분에서 문제가 발생할 수 있습니다.

Martyn

관련 문제