| Out of Process 자동화 서버와 같이 스스로 메모리 관리에 책임이 있는 형태의 COM 서버들은 메모리 충돌 오류를 일으킬 가능성이 상대적으로 적다고 볼 수 있습니다. 하지만, In Process 자동화 서버의 경우, 특히 ActiveX들은 기능이 복잡할 수록 이러한 문제를 일으킬 가능성이 큽니다. 이번에 작업한 프로그램 중 하나인 HwpCtrl을 호스팅하는 닷넷 기반 응용프로그램에서도 예외는 아니었는데, 두 가지 문제점이 있었습니다. 첫 번째: 트레이 아이콘이 정리되지 않고 잔상이 남는 문제 아래아한글 소프트웨어 연구실 (http://swlab.haansoft.com) 에도 같은 문제에 관한 FAQ가 있었습니다만 "해결할 수 없다" 는 것이 답이었습니다. 그러나, 이 답에 만족하지 못해서 인터넷 이곳저곳을 찾아다니다가 문제에 매우 훌륭하게 접근하는 소스 코드 하나를 발견하였습니다. http://cpueblo.com/programming/api/contents/197.html 위의 아티클에서 제공한 Visual C++ 소스 코드를 C#으로 이식한 후, 정리되지 않은 아이콘이 대부분 제거가 잘 된다는 것을 확인하였습니다. 하지만 제가 해결하고자 하는 문제였던 HwpCtrl ActiveX 컨트롤의 아이콘 제거는 여전히 이루어지지 않았습니다. 단순히 프로세스 ID 값을 얻어오지 못한 경우에는 속하지 않았기 때문에 이 코드가 기대하는대로 동작해주지는 않았습니다. 따라서, 프로세스를 열도록 시도하여 존재하지 않는 프로세스임을 재 확인하는 코드를 추가해야 했습니다. 위의 소스 코드 파일은 C#을 기준으로 프로그래밍된 것이지만 기본적인 컨셉은 다른 프로그래밍 언어에서도 참고할 수 있을 것입니다. 위의 코드를 컴파일 시에는 /unsafe 스위치를 지정하여 Unsafe Code를 컴파일할 수 있도록 허용해야 합니다. 위의 코드를 호출하기 위해서는, 프로세스가 한 번 이상 종료된 상태여야 했기 때문에 진입점 메서드를 이중으로 프로그래밍했습니다. 특정한 명령줄 스위치가 전달된 경우와 그렇지 않은 경우를 구분 지어 정상 모드에서 종료한 경우 프로세스를 연이어 다시 시작하게 만들고 그 자신은 종료하게 두면, 나중에 Cleanup 모드로 시작된 프로세스에 의해 실제 트레이 아이콘 정리 작업이 발생하게 됩니다. 두 번째: 프로그램 종료 직후 발생하는 알 수 없는 메모리 위반 오류 HwpCtrl을 호스팅하는 프로세스를 종료한 직후에 발생하는 알 수 없는 메모리 위반 오류 때문에 고민이 많았습니다. 이 현상은, VSHOST.EXE에서 실행되는 Visual Studio Hosting Process 모드에서는 문제가 되지 않지만, 단독으로 응용프로그램을 실행할 때 발생하는 문제였습니다. 이 문제의 해결을 위하여 Internet Explorer Control 위에서 호스팅하도록 접근 방법을 변경해 보았습니다. 참조 대상 어셈블리의 수를 줄이고 프로그램의 크기를 줄이는 효과는 있었지만 문제는 여전히 그대로였습니다. 적당한 해결 방법이 없는 상태에서 생각해낸 최종 방법은 강제 프로세스 종료였는데 문제는 시점이었습니다. System.Windows.Forms.Application.Run 메서드가 폼 이외에 컨텍스트 개체를 통해서 GUI 메시지 루프를 시작할 수 있다는 것을 알았고, 이 컨텍스트 개체가 제공하는 메시지 루프 이탈 시점에 발생하는 이벤트를 이용하여 프로그램을 종료하도록 하였습니다. 그리고 Main 메서드 전체에 SEH 구성을 두어 catch, finally 절 이후에 강제 종료가 일어나도록 하였습니다. 결론 위의 두 가지 방법 모두 정상적인 방법이 아니지만, 문제의 해결을 위하여 적용할 수 있었던 최선의 방법이었다고 생각합니다. 또한, 위의 방법을 적용한 경우 적용된 프로그램이 Windows Vista에서 관리자 권한을 필요로 할 수도 있습니다. |
'ActiveX'에 해당되는 글 4건
- 2008/06/17 남정현 HwpCtrl ActiveX 컨트롤에 관한 문제점 해결 방안 두 가지
- 2007/02/03 남정현 한글 Windows Vista 홈페이지에 실린 MS의 ActiveX에 대한 견해
- 2006/12/03 남정현 이올라스 패치에 대한 초간단 솔루션
- 2006/12/03 남정현 ActiveX는 그 수명을 다하려는가...
트랙백을 보내세요
Windows Vista 호환성 문제 바로 알기 호환성과 ActiveX Windows Vista에서 금융 사이트 등 웹사이트가 운영되지 않는다는 호환성 문제가 제기되고 있습니다. 그러나 정확한 의미에서 이 호환성 문제란 ActiveX 기술에 의존한 특정 웹사이트가 특정 버전의 윈도우와 특정 버전의 브라우저가 아니면 실행되지 않는 상황을 의미하며, 이는 수 년 전부터 기타 운영체제 및 기타 브라우저에서 호환되지 않는 문제와 동일한 맥락에서 해결법을 찾아야 합니다. ActiveX는 웹 브라우저에서 PC의 모든 기능을 활용할 수 있게 하는 기능으로, 사용자에게 더 많은 가능성을 열어 준 기능입니다. 그러나 그 발표로부터 10년이 지난 지금 인터넷은 당시에는 생각하지 못했던 악성 소프트웨어로 보안 위협을 겪고 있습니다. 이는 마이크로소프트도 기술 개발 당시에는 예측하지 못했던 문제로, 스파이웨어나 바이러스 등 인터넷을 통해 사용자의 PC를 파괴할 위험성을 지닌 프로그램이 이 ActiveX에 의존하고 있습니다. 마이크로소프트는 2002년부터 점차적으로 포괄적인 ActiveX 컨트롤의 권한을 축소해 왔습니다. 인증 받지 못한 ActiveX의 실행을 막았으며, Windows Vista에서는 보호모드를 마련하여 컴퓨터 내의 특정 영역만 사용할 수 있도록 하였고, 관리자 권한도 제약을 두었습니다. 이 제약은 모두 향후 예측할 수 있는 모든 잠재적 보안 위협에 대응하기 위한 방향이고, 더 안전한 OS로 완성하기 위한 마이크로소프트의 노력과 방향성에 관련 업계는 세계적으로 동의를 보내고 있습니다. 따라서 보안 문제와, 호환성 문제를 해소하기 위해, 일반 웹사이트들의 개별적인 ActiveX 활용은 자제되어야 한다는 것이 마이크로소프트의 입장입니다. 환경적으로 볼 때, 한국의 인터넷 시장은 세계 어느 나라보다 먼저 다양한 서비스를 개발하였습니다. 그래서 당시 다양한 가능성을 열어 주었던 ActiveX를 적극 활용한 서비스를 기획했습니다. 그 결과, 세계적으로 ActiveX는 주로 UI의 보완을 위해서 활용되어 온 정도입니다만, 한국은 보안과 같은 시스템 솔루션이 ActiveX 기반으로 마련됩니다. 그러나 10년의 시간이 흐르면서 세계적인 보안 환경은 다양한 변화를 맞이합니다. 당시의 미비점도 해결이 되고, 또 당시 생각지 못했던 부차적인 그러나 더 심각한 보안 위협이 대두됩니다. 이에 효과적으로 대응하기 위한 방안을 마련할 시점에 오게 된 것입니다. ActiveX 사용에 대한 대안의 제안 ActiveX를 보안과 같이 시스템 레벨에서 사용하는 것은 지양되어야 합니다. 128bit SSL을 비롯한 표준화된 인증 체제, 그리고 암호 발생기 등 다양한 보안 솔루션을 국가적 차원에서 열린 자세로 수용하여, 다양한 플랫폼에서 기 구현되고 검증된 인프라를 활용하도록 하는 것이 바람직합니다. 현재 Internet Explorer는 세계 표준적 보안 기능을 내장하고 있고, 세계 각국의 은행들은 브라우저 내장의 보안 기능을 활용하고 있습니다. 사용자의 다양한 UI 요구 수용을 위한 ActiveX 사용도 상황 별로 분별하는 것이 바람직합니다. ActiveX를 지금과 같이 애플리케이션 레벨에서 사용자 편의를 위해 제공하는 것은 그대로 활용하실 수 있습니다. 그러나 일반 웹사이트 및 솔루션 벤더를 위한 마이크로소프트의 제안은 잠재적 보안 위험 요소로 구분되고 있는 ActiveX 대신, .NET Frameworks 3.0에 근거한 WPF 및 WPF/E와 같은 안전한 프레젠테이션 솔루션을 활용하여 사용자 체험을 강화하는 것입니다. 또 만약 구축하려는 사이트가 일반 사용자용인 경우는 되도록 웹의 권고안을 준수하여 멀티 플랫폼 멀티 브라우저용으로 만드는 것을 마이크로소프트는 추천하고 있습니다. |
트랙백을 보내세요
댓글을 달아 주세요
1. 이 글에 첨부된 patch.zip 파일을 다운로드하여 patch.js 파일을 원하는 곳에 저장한다. [CODE] 내용 출처: http://cafe.naver.com/repay.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=345 |

TrayWindowCleanup.cs
patch.zip


댓글을 달아 주세요