창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by 지상현2010-07-03 18:42:55, Hit : 4492
왜 manifest를 넣으면 테마가 적용되는가
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=freeboard&no=4474
이것도 제가 알아낸걸 메모 남기듯이 그냥 급하게 막 적는 글입니다.
나중에 저 보려고-_- 적는 글이지만 다른 사람 봐도 상관 없으니(..)


1. 효율을 위해
프로그램에는 공통된 기능이 있고, 이를 다른 프로그램끼리 공유해서 쓰면 좋을 것이다.
알다시피 윈도에서는 이런 기능을 DLL 형태로 제공한다.


2. DLL의 장점이 단점으로
DLL은 특정 기능을 분리시킬 수 있기 때문에, 만약 프로그램 어떤 부분에 문제가 있을 경우
그 문제를 수정한 DLL만 업데이트하면 전체를 바꾸지 않아도 문제를 해결할 수 있는 장점이 있다.

하지만 반대로 DLL 버전에 따라 동작하는 기능이 다른 경우, 프로그램은 알맞는 버전의 DLL을 읽어오지 못하면 오류가 생길 수 있다.


3. DLL 지옥
게다가 DLL은 파일이기 때문에 같은 DLL이더라도 어느 곳에서 읽느냐에 따라 다른 DLL이 로드될 수 있고, A 프로그램은 v1.0의 DLL을 써야 하고 B는 v2.0을 써야 하지만 시스템 폴더에 공유 형태로 서로 덮어써 버리면 A, B 프로그램이 동시에 작동할 수 없다.

이런 식으로 DLL 파일들이 복잡하게 엉켜있는 상황을 DLL 지옥이라고 한다.


4. COM과 버전 관리
바이너리 레벨의 호환성과 객체지향을 지원하는 COM으로도 DLL 관리를 어느 정도 해결할 수 있지만 COM 자체가 약간 복잡하고 오버헤드가 있는 기술이며, 결국 프로그램 안에서 손을 봐야 한다는 단점이 있다.
대표적으로 DirectX가 COM을 이용해 버전을 관리한다.
따라서 DirectX는 버전 7을 쓰고 싶을 때 그 버전이나 상위 버전만 깔려 있으면 무조건 로드할 수 있다.
(물론 OS 아키텍처 자체가 바뀌는 경우는 어쩔 수 없다. XP에선 DirectX 9까지만 해당)


5. side-by-side assembly
XP부터 이런 문제를 해결하기 위한 새 기능을 도입하였다.
이를 side-by-side assembly라 하고, 앞으로는 DLL 파일을 직접 사용하는 대신 어셈블리라는 단위를 사용한다.
(여기서 말하는 어셈블리는 저수준 프로그래밍에서 말하는 니모닉 어셈블리가 아니다)
참고: assembly라는 뜻 자체가 뭔가 조립하는 것이므로 그렇게 이해하면 될 것 같음

말이 기니까 줄여서 SxS라고 한다.


6. SxS의 동작 방식
SxS는 사실 간단하다. 프로그램이 올바른 DLL을 찾아 헤매는 걸 OS가 대행해주는 것이다.
프로그램이 "내가 원하는 건 XXX에서 동작하는 YYY의 1.0 버전이다" 라고 알려주면
OS가 알아서 그런 DLL들을 찾아 로드해준다.

프로그램이 OS에게 알려줄 때는 manifest 라는 XML 파일을 작성한다.
여기에 원하는 어셈블리(DLL이 아니기 때문) 정보를 적어주면 운영체제가 참고해서 프로그램을 실행하면서 적절한 어셈블리를 로드해준다.


7. manifest 로드하기
실행 파일 이름 뒤에 .manifest가 덧붙은 파일을 찾아본다.
없으면 실행 파일의 리소스로 들어있는 manifest를 찾아본다.
원래 이것보다 더 복잡하게 찾지만 흔히 이 2가지를 이용하는데 파일 하나로 해결하고 싶으면 리소스에 집어넣는다.


8. XP테마와 관계
XP부터 지원되는 테마는 윈도의 공통 컨트롤(버튼 같이 공통적으로 지원해주는 것들)을 제공하는 DLL 버전이 6으로 업데이트 되었기 때문에 가능하다.
그 전까진 버전 5까지 있었다.

그런데 버전 6은 상당히 많이 바뀌어서 버전 5와 호환되지 않는다.
따라서 옛날 프로그램은 버전 5를 계속 써야 할 것이고, 새로 만든 프로그램은 버전 6을 쓰는게 좋을 것이다.

그렇다고 버전 5와 버전 6의 파일 이름을 아예 다르게하면 프로그램이 한쪽만 지원하게 되어 양쪽에서 호환되지 않는다.
파일 이름을 같게 하면 (현재 둘 다 comctl32.dll) 새 프로그램은 버전 6을 로드하고, 옛 프로그램은 버전 5를 로드해야 하는데, 그걸 프로그램에서 구분하지 않으면 안 되기 때문에 역시 호환성 문제가 발생한다. 그리고 파일 이름이 같으면 같은 폴더에 둘 수도 없다.

따라서 여기에 SxS를 사용하는 것이다.
manifest에 버전 6의 comctl32.dll을 로드해주세요 하고 적어두면 윈도가 알아서 버전 6으로 불러와서 테마가 적용되고,
굳이 버전 5를 로드해달라고 하면 버전 5짜리를 로드하고 테마가 적용되지 않을 것이다.
(하지만 SxS는 단위가 어셈블리기 때문에 어셈블리 이름을 적어준다. 위 파일의 어셈블리 이름은 Microsoft.Windows.Common-Controls 임)
(버전 5는 SxS 기능을 쓰지 않기 때문에 manifest로 버전 5를 로드할 수 없다)

또한 버전 5는 옛날 방식으로 시스템 폴더에 둬서 manifest를 사용하지 않는 프로그램은 옛날 방식대로 버전 5를 로드하게 될 것이다.


테마를 적용하는 manifest 파일의 일부 내용을 보면 이렇다.

<assemblyIdentity type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*' />

Microsoft.Windows.Common-Controls라는 어셈블리의 버전 6을 로드하라고 적혀있는게 보일 것이다.
이때 참고할 점은 아키텍처도 지정하고 있다는 것이다.
요 아래 글에서 "XP는 32비트나 64비트나 같은 버전을 사용하지만"이란 말의 뜻이 이것이다.
32비트나 64비트나 버전 숫자는 똑같은 걸 쓰지만 manifest에 아키텍처를 x86에서 amd64로 바꾸면 알아서 64비트용으로 로드한다는 뜻이다.
Vista 이후부터는 어떻게 되는지 모르므로 확인이 필요함.



결론을 내리자면,
manifest 파일 때문에 테마가 적용되는게 아니라,
comctl32.dll의 버전 6 때문에 테마가 적용되는 것이며,
comctl32.dll은 SxS DLL이기 때문에 불러오려면 manifest를 써야 한다.

즉, manifest는 테마를 위한 파일이 아니라 테마 기능을 불러오라는 내용만을 담고 있다.




부록:
SxS용으로 만든 DLL은 WinSxS 폴더에 복잡하게 처박아 두기 때문에 옛 프로그램에서 실수로 로드되는 일이 없다.
(옛날 방식에서 자동으로 DLL 찾는 경로에만 두지 않으면 된다)
옛날 방식대로 DLL을 넣어두면 옛 프로그램은 manifest를 무시하고 그냥 옛날 방식대로 로드하니까 기능이 동작하고, 새 프로그램은 manifest를 읽어 새로운 SxS DLL을 불러오기 때문에 새 기능을 쓸 수 있다.

(혹시나 이걸 보고 응용해서 모든 프로그램에서 테마를 지원하기 위해 시스템 폴더에 있는 comctl32.dll을 버전 6으로 강제로 덮어쓰려 하지 마세요. comctl32.dll 버전 6도 버전 5의 comctl32.dll가 필요하답니다.)

SxS 기능으로 도배를 한 것 중 대표적인게 닷넷이다.
닷넷은 닷넷의 각 기능을 모두 어셈블리로 만들고 필요한 버전과 언어, 아키텍처 등등에 따라 필요한걸 로드해서 쓰는 방식이므로 DLL 지옥 문제를 해결하면서 여러 기능을 모두 쓸 수 있도록 해준다.

참고: SxS로 이루어지는 닷넷의 버전 관리는 COM과 다른 방식이기 때문에, DirectX와 다르게 닷넷 2.0 런타임이 있다고 닷넷 1.1 프로그램이 실행되는게 아니다.
닷넷 1.1 런타임이 따로 있어야 실행할 수 있다.
그치만 1.1과 2.0에 중복되는 DLL이 있더라도 SxS가 정확한 버전을 로드해주기 때문에 문제가 없다.

이런 식으로 닷넷은 XP 이상에서 지원하는 기능으로 도배를 했기 때문에 95/98/Me를 지원하지 않는 거지만,
지원하는게 기술적으로 불가능한것도 아니면서 그렇게 한 이유는 새 기능이 훨씬 낫기 때문도 있지만 한물 가도 한참 간 95 같은 운영체제를 지원하느라 들이는 노력에 비해 얻는 것이 거의 없다는 어른들의 사정(?) 때문.

손상진   2010-07-04 AM 12:06:20  
왠지 이런글은 자게에서 잊혀지지 말고
강좌 게시판에 오래오래길이길이 남아야할껏만 같은..^^
박종훈   2010-07-04 AM 12:31:58  
창조의 ㅎ파일관리창은 [바로가기 폴더]기능을 지원하지 않는데, manifest로 해결할수는 없는거죠?ㅠㅠ
(물론 바로가기 폴더 기능이 꼭 필요한건 아니지만, 없으면 은근히 불편해서요-_-)
지상현   2010-07-04 AM 12:42:09  
@박종훈
파일 열기 창 같은건 DLL은 같은데 업그레이드 된 버전이죠.
이건 버전 관리를 구조체에 어떤 버전이라고 알려주는 방법으로 처리하는데, 안타깝게도 옆구리에 뭐 생기는 플래그 부분을 넣으려면 높은 버전을 넣어줘야 합니다.
그런데 창조는 옛날에 만들어진거라 ㅠㅠ

ㅎ파일관리창은 없는 파일 처리, 있는 파일 겹쳐쓸지 물어보기라든가 옵션이 많이 빈약해서 사실 상당히 불편합니다.
LIST ALL               GO TO THE TOP


N
C
   Subject
Posted by
Date
H
3721
   컴퓨터 AS와 관련하여 [4]
신용주 2010/07/08  4325
3720
   옛날 OCPLAY어가 떠오르네요.. [5]
권선중 2010/07/06  4942
3719
   인력모집 공고가 났습니다.^^ [2]
남상기 2010/07/06  4275
3718
   창조 버전업은 언제쯤 기대해볼 수 있을까요? [1]
신용주 2010/07/06  4154
3717
   노래방 흉내내기 하니.. [1]
손상진 2010/07/06  4568
3716
   옛날 소스파일 필요하신분? [5]
이정도 2010/07/05  4749
3715
   으오, 속도측정~ 왠일로 이런 안정적인 그래프가 ;; [2]
김동민 2010/07/05  4518

   왜 manifest를 넣으면 테마가 적용되는가 [3]
지상현 2010/07/03  4492
3713
   64비트란 놈에 대해 간략하게 정리... [9]
지상현 2010/07/02  4476
3712
   한컴에서 hwp 파일 포맷 공개한답니다. [3]
지상현 2010/07/01  4796
3711
   휴~ 대체 지름의 끝은 어디인가! [3]
김동민 2010/06/28  4795
3710
   아래 배열 문제 해결 ㅋㅋㅋㅋㅋ
지상현 2010/06/28  4743
3709
   창조에서 객체 배열 다루다가... [2]
지상현 2010/06/27  4883
3708
   테니스 경기는.. 두게임 이상 차이가나야 승부가 가리나 보군요..
손상진 2010/06/27  4817
3707
   ARON KB-A106S+ 기계식 키보드 [4]
김동민 2010/06/25  5040
3706
   아아 간만에 정말 거나하게 웃어봅니다!!! [2]
지상현 2010/06/25  4067
3705
   저와 함께 일하실 분? [6]
남상기 2010/06/25  3720
3704
   아이고~ 동원훈련 다녀왔습니다 ㅋ [7]
김동민 2010/06/25  4309
3703
   키보드 질렀습니다. [4]
손상진 2010/06/24  4663
3702
   (공지종료)서버 호스팅 업체 유지보수 작업 안내(24일 새벽) [3]
손상진 2010/06/17  4858
3701
   점점 맛이 가는 SmartScreen 필터...
지상현 2010/06/23  4553
3700
   고기, 빵, 라면... [1]
지상현 2010/06/20  4692
3699
   재미있는 신문기사 [2]
권선중 2010/06/12  4251
3698
   키보드를 새로 구입했습니다. [5]
손상진 2010/06/12  4465
3697
   창조가 한사람의 운명을 바꾸다!! [4]
권선중 2010/06/12  4067
LIST ALL   Prev [1][2][3][4][5][6][7] 8 [9][10]..[156] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인