윈도우7

Windows/assembly 폴더 WinSxS 폴더의 관계...

sungtg 2012. 4. 11. 15:33

Windows/assembly의 폴더의 정체를 풀어 보기로 하겠습니다.

 

 

탄생 배경.

 

이 폴더를 만들게된 중요한 원인은 과거에 윈도우xp 전 버전에서 보여 주었던 dll 파일들의 설치 문제점 때문에

생겨난 폴더 입니다.

 

윈도우가 dll 파일을 사용하면서 system 폴더가 어마어마하게 커진 적이 있었습니다.

설치 되는 프로그램들의 dll 파일을 모두 system 폴더에 설치를 하는 문제점 때문이었지요..

그런데 이것 보다 더 큰 문제가 있었습니다.

dll 파일입니다.  이 파일을 구분하는 방법은 단순히 파일이름 뿐이라는 것이 문제 였지요..

그래서 여러 프로그램을 설치 하다 보면 그 전에 설치 된 프로그램들이 작동이 안되는 문제가 발생되곤 했었습니다.. 한마디로 dll 파일에 대한 버전 관리가 안되었던 문제 였습니다.

 

 

그래서 그 다음에 나온 것이 각 프로그램의 설치 되는 프로그램의 폴더에 해당 dll 파일을 설치해서 사용하게 하는 방법이었지요.. 이것이 문제가 생겼습니다. 

윈도우의 system dll 파일들 예를 들어 comctl32.dll 파일 등과 응용프로그램에서 지원하는 dll파일들이 로드 될때

서로 충돌이 나는 경우가 발생했습니다.

 

그러다가 윈도우xp가 나오면서 GUI 적인 요소가 많이 들어가면서..

dll 파일의 버전 관리 차원에서 만든 것이 바로 Windows/assembly 폴더 입니다.

 

Assembly 란...

 

가장 근본 컴퓨터 프로그램 용어이지요..

assembly 하나에는 하나의 exe 또는 dll 파일이 존재한다고 생각하면 됩니다.

또한 assembly로는 거의 모든 정보를 담을 수 있습니다. 텍스트, 동영상, 이미지파일등등..

컴 프로그램 중에서 빠른 프로그램 동작속도를 내는 용어는 assembly로 작성된 것입니다.

임베디드 된 기기에 있는 프로그램 제작에 많이 사용하지요.. c 와 같이...

윈도우도 이것으로 만들어져서 발전 된 것이지요...

 

 

Windows/assembly 폴더의 기능.

 

윈도우에서 dll을 읽어 올때는 해당 EXE/모듈이 있는 디렉토리,
현재 디렉토리, 윈도우 및 윈도우 시스템 디렉토리,
path 환경변수가 걸린 디렉토리 등등의 순서대로 탐색합니다.

물론 kernel32, gdi32, user32 같은 시스템 dll도 다 여기에 속합니다.

 

 

윈도우에서 제대로 프로그램이 설치 되었다고 인정하는 단계는

폴더를 만들고

복사하고

system32 폴더에 dll 파일의 복사와 레지스트리 등록.

WinSxS 폴더에 설치된 파일의 정보 등록

과정을 거치 되는데.. 여기서도 dll 파일의 버전 문제가 여전하므로

 

이러한 문제들을

VS 2005 버전부터 제작된 프로그램들은 

2005에서 지원하는 통합된 메니페스트 방법을 사용하면서.

설치가 같이 되기 시작 했습니다.

메니페스트는 보통 xml 파일로 되어 있고.. 

DLL의 고유 식별자, CPU 아키텍쳐, 언어, 정확한 버전 번호를 가지고있다 

 

설치하는 방식은 인스톨프로그램에서 제어 할 수도 있고

Microsoft Visual C++ 2005 redistributable 이런 형식의 배포판과 함께 설치하는 방법이 있습니다.

그래서 프로그램을 설치하다 보면 제어판/프로그램추가/삭제에

Microsoft Visual C++ 2005 redistributable 많이 설치 된 것을 볼 수 있을 겁니다.

 

 

정리..

 

같은 이름의 dll 파일이라고 해서 같은 dll파일이 아닙니다.

예를 들어 msvcrxx.dll 파일이라고 system32에도 오피스에도 있지만

틀린 파일입니다.

각각의 프로그램에서 dll 이나 exe 파일 불러 올때 Windows/assembly 폴더에서 정보를 받게 되는 것이지요..

폴더안에 내용을 삭제하면 기존에 프로그램 들이 재대로 작동을 하지 않겠지요 그냥 두시는 편이 좋습니다.