성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Reordering on an Alpha processor ;...
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div class='mainCenterTitle'>AppDomain.GetEntryAssembly()를 우회하는 방법</div><br /> <br /> 이 토픽은... 다음 글의 릴레이 토픽이라고 볼 수 있겠습니다. ^^<br /> <br /> <pre class='code'> 불가능은 없다... 대략 귀찮을 뿐... ; <a target='_tab' href='http://www.simpleisbest.net/archive/2005/05/27/153.aspx'>http://www.simpleisbest.net/archive/2005/05/27/153.aspx</a> </pre> <br /> 위의 글을 읽어보면, 결국 GetEntryAssembly()에서 반환되는 어셈블리에 "licenses.licx" 리소스 파일이 있어야 한다는 건데 애석하게도 IE 임베드 형태의 스마트 클라이언트에서는 GetEntryAssembly()가 NULL을 반환하기 때문에... 라이선스 오류가 발생한다는 것이 주요 이슈입니다.<br /> <br /> 저도... 한때 <a target='_tab' href='/2/0/537'>ChartFX의 64비트 환경에서 라이선스 삽질</a>을 한번 해본 뒤라서... 위의 글을 읽고 나니... ^^ 색다른 오기가 생겼습니다. (룰룰루... 나도 삽질 한번 해봐야쥐!!!)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 일단, 유수석님의 글에서는... ChartFX에 특화된 방법으로 해결하였기 때문에 아쉽게도 그것을 공개하실 수 없다고 하셨습니다. 그렇다면... 기왕 하는 거, ChartFX에 특화되기 보다는,,, 그냥 일반적인 "가로채기" 기술을 알려드린다면... ^^; 그런 문제가 발생하지는 않을 듯 싶어서... 저는 ChartFX 쪽은 Reflection으로 건드리지 않았고 단지 GetEntryAssembly에 대해서만 Reflection으로 살펴봤습니다. (참... 이젠 Reflection도 필요없죠. .NET 소스 코드가 있으니.)<br /> <br /> 조금씩 들어가볼까요? ^^<br /> <br /> 우선,,, .NET 소스 코드를 통해 GetEntryAssembly()의 소스 코드를 확인해 봤습니다.<br /> <br /> <pre class='code'> public static Assembly GetEntryAssembly() { AppDomainManager domainManager = AppDomain.CurrentDomain.DomainManager; if (domainManager == null) domainManager = new AppDomainManager(); return <b>domainManager.EntryAssembly</b>; } </pre> <br /> 오호... EntryAssembly 공용 속성을 부르는 군요. 그렇다면, EntryAssembly는 어떻게 정의되어 있을까요?<br /> <br /> <pre class='code'> private Assembly <b>m_entryAssembly</b> = null; public virtual Assembly EntryAssembly { get { if (m_entryAssembly == null) { m_entryAssembly = nGetEntryAssembly(); } return <b>m_entryAssembly</b>; } } </pre> <br /> 자! 답이 나왔습니다. 이 정보를 바탕으로 다음과 같은 사용법의 유틸리티 클래스를 만들어 봤습니다.<br /> <br /> <pre class='code'> public partial class Form1 : Form { public Form1() { <b>DetourAppDomainManager appManager = new DetourAppDomainManager();</b> <b>appManager.Detour(typeof(Form1).Assembly);</b> // 현재 어셈블리 지정 Assembly asm = Assembly.GetEntryAssembly(); InitializeComponent(); // GetEntryAssembly()를 사용하는 클래스 사용 <b>appManager.Restore();</b> // 복원 } } </pre> <br /> 소스와 함께 간단한 예제를 게시물의 첨부파일에 실었으니 참고하십시오.<br /> <br /> (참고로, 저는 스마트 클라이언트에서 직접 테스트 해보지는 않았습니다. 혹시나, 테스트 해보신 분들은 정말 되는지...? 안되는지...? 결과를 좀 알려주십시오. 테스트 하기 귀찮아서. ^^;)<br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1628
(왼쪽의 숫자를 입력해야 합니다.)