2007.11.16 23:37

닷넷 프레임웍이 설치되어 있는지 확인하는 것은 닷넷 개발자들이
개발의 마지막에 항상 고민해야 하는 내용입니다.

언듯 생각해 보면 제일 먼저 고민하게 될 것 같지만 사실은 개발을 끝내고 배포할 때
해당 컴퓨터에 닷넷 프레임웍이 포함되어 있지 않으면 대략 난감한 상황에 부딛히게 됩니다.

이번에 저도 그런 문제를 심각하게 고민하게 되었는데요
몇가지 찾은 해답을 공유해보려고 합니다.

우선 일반적인 애플리케이션 같은 경우는 배포 프로그램에 닷넷 프레임웍을 함께 포함시켜
두면 됩니다. 이런경우 닷넷 프레임웍 만큼 용량이 증가 되지만 요즘 환경으로는 닷넷 프레임웍
정도는 크게 문제 되지 않을 것이라 생각됩니다.

사용자 삽입 이미지
<그림1> 설치 프로젝트 템플릿

일반적인 애플리케이션이 아니라 Smart Client 방식의 애플리케이션이라면 문제 해결은
오히려 더 쉬워진다. Smart Client방식은 어차피 웹에서 닷넷 어셈블리가 배포되기 때문에
서버측에서 클라이언트의 Http header를 분석해 보면 닷넷 프레임웍의 설치 여부를 쉽게 알 수 있습니다
물론 어떤 경우에는 제대로 작동하지 않을 수도 있지만 Smart Client가 대부분 정형화된 기업
환경에서 주로 활용되기 때문에 큰 문제 없이 사용 할 수 있는 방법입니다.

GET /Apps/SmartClientBasic HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: ko
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.simpleisbest.net
Proxy-Connection: Keep-Alive
<리스트1> Http header

리스트1에서 노란색 부분을 보면 .NET CLR버전이 나와 있는 것이 보인다.
이를 이용해서 닷넷 프레임워크의 설치 여부를 판단하고 설치되어 있지 않으면 닷넷 프레임웍을
다운로드 받을 수 있는 사이트로 리디렉션 해주면 된다. ^^

여기에 관한 글은 드원테크의 유경상 수석님의 블로그에 잘 설명되어 있습니다.
http://www.simpleisbest.net/archive/2006/03/12/564.aspx

시스템에 닷넷 프레임워크가 설치 되어 있는지 확인해 보는 방법중에 젤 확실한 방법
레지스터리를 살펴보는 방법입니다. 레지스터리를 확인해 볼 수 있는 방법을 알려주는
영문 아티클은 http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;315291를 참조하십시요.
영문 아티클에 보면 아래와 같이 11단계로 레지스터리를 체크하고 있습니다.

1. Create a new Visual Studio Setup project from the Setup and Deployment project type.
2. Start Solution Explorer, and then open Launch Conditions Editor from the Solution Explorer toolbox.
3. In Launch Conditions Editor, right-click the Search Target Machine node, and then click Add Registry Search.
4. Type an appropriate name for the search, such as "Search CLR version."
5. Click the new search, and then press F4 to open Launch Condition Properties. Alternatively, on the main menu, click View, and then click Properties Window.
6. Set the RegKey property to one of the following values:
For the .NET Framework 1.0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.0

For the .NET Framework 1.1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v1.1

For the .NET Framework 2.0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\v2.0
7. Set the Value property as follows:
For the .NET Framework 1.0: "3705"
For the .NET Framework 1.1: "4322"
For the .NET Framework 2.0: "50727"
8. In the Launch Conditions node, add a new launch condition. To do this, right-click the node, and then click Add Launch Condition. Give this condition an appropriate name, such as "CLR condition."
9. Click the new condition, and then set the Condition property as follows:
For the .NET Framework 1.0:
REGISTRYVALUE = "3321-3705"
For the .NET Framework 1.1:
REGISTRYVALUE="3706-4322"
For the .NET Framework 2.0:
REGISTRYVALUE="50727-50727"
10. Set the Message property to an output message, such as "The .NET Framework 1.0 is not installed.", "The .NET Framework 1.1 is not installed.", or "The .NET Framework 2.0 is not installed."
11. Build and test the deployment project.

닷넷 프레임웍 3.0의 배포도 역시 크게 다르지 않지만
http://www.microsoft.com/korea/msdn/library/ko-kr/dnlong/html/netfx30.aspx 여기를 참조해 보면
좋은 내용들을 많이 알 수 있습니다. ^^

닷넷 프레임웍이 Windows나 혹은 Windows Service Pack에 함께 포함되었으면 좋겠다는
생각을 항상하지만 그렇게 했다가는 또 Microsoft 음모론 부터 시작해서 반독점법 위반까지 여러가기
비현실적인 문제들이 발생할 수 있습니다. 덕분에 약간의 수고를 추가로 할 수 밖에 없습니다.
사실 뒤집어 생각해보면 사용자들 입장에서도 좀 더 불편할 수 밖에 없게 된 것읍니다.

앞으로는 닷넷 프레임웍이 Windows에 기본 포함되었으면 좋겠습니다.

신고


티스토리 툴바