검색결과 리스트
ClickOnce에 해당되는 글 5건
- 2010/11/05 [펌]Clickonce 인증서 만료시 해결책 - 기존 인증서 만료기간 수정
- 2008/07/30 ClickOnce 업데이트 서버 구성 방법 정리
- 2008/07/21 [펌] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper)
- 2008/06/06 [펌]ClickOnce - Uninstall
- 2008/06/06 [펌]ClickOnce - 바탕화면 바로가기
글
[펌]Clickonce 인증서 만료시 해결책 - 기존 인증서 만료기간 수정
| - renewcert 소스 참조 - renewcert 소스에 만료기간을 5년만 더 연장하게 되어있음 MakeNewCert 메서드의 certExpireDate.wYear += 5; 부분을 수정해서 사용하자 |
출처 : http://www.ensimple.net/enSimple/show.aspx?cnum=289&b_id=study_smart&page=1
툴(RenewCert) : http://www.may.be/renewcert/
부가정보 : SelfCert 툴도 있음
80% 부족한 ClickOnce 정보2 - ClickOnce Permission & Authenticode
80% 부족한 ClickOnce 정보이다. 즉 대부분의 내용은 언급되지 않는다. 단 창스가 궁금해 하는 내용만 담도록 한다.
MSDN에서 읽은 내용을 토대로, 그 중에서 주관적인 기준을 가지고 선별하여 옮겨 놓았음을 밝힌다.
MSDN : http://msdn2.microsoft.com/en-us/library/ms172240(VS.80).aspx
[2008-02-04 추가]
이미 만료된 인증서로 ClickOnce 업데이트를 게시하는 것은 문제가 있음. 새로운 인증서를 가지고 다시 업데이트를 작성하게 되면
"The deployment identity does not match the subscription. " 에러 발생함.
따라서 동일한 인증서를 가지고 만료기간만 증가시켜주어야 함. 아래에 솔루션이 존재함.
http://www.may.be/renewcert/
ClickOnce의 기본적인 사용권한은 첫 버전의(original version)의 어플리케이션이 배포되어진 위치를 기준으로 하고 있다.; 업데이트는 이 사용권한을 상속받게 된다.
ClickOnce 사용자가 설치 시 권한 경고 팝업을 보지 않도록 하려면, 시스템 관리자는 ClickOnce 배포 정책을 통해 특정 어플리케이션 게시자을 신뢰된 제공자 목록에 등록하게 하여(클라이언트 머신 상에서) 이를 방지할 수 있다.
어플리케이션의 사용권한은 어플리케이션 manifest의 <trustInfo> 요소에 의해 결정된다. Visual Studio는 프로젝트의 보안 속성 페이지를 통해 이 정보를 자동으로 생성해 준다.
AuthentiCode는 어플리케이션의 게시자(제공자)의 신원을 검증하기 위해 디지털 인증서를 통해 어플리케이션 코드를 서명하는 산업 표준의 암호화 방식을 사용하는 마이크로소프트의 기술이다.
코드 사이닝을 위한 인증서는 아래의 세가지 방법 중 하나를 통해 얻을 수 있다.
□ 인증서 벤더를 통해 구매
□ 디지털 인증서 발행을 책임 전담하는 조직의 기관을 통해 수령.
□ MakeCert.exe를 통해 자신만의 인증서를 생성, 이 툴은 .NET Framework SDK에 포함됨.
MakeCert를 통해 생성된 인증서는 일반적으로 "self-cert" 또는 "test cert", 즉 테스트 인증서라고 불린다. 이러한 종류의 인증서는 .NET Framework 상의 .snk 파일과 매우 유사한 방식으로 작동한다. : 이는 독립적으로 public/private 암호화 키 쌍을 포함하고, 제공자에 대한 어떠한 검증 데이터도 포함하지 않는다.
우리는 인트라넷과 같은 높은 신뢰를 가진 환경에서 테스트 인증서를 사용할 수 있다.; 하지만, 이러한 어플리케이션이 클라이언트 컴퓨터 상에서 구동될 때, ClickOnce는 "Unknown Pulisher"로 부터 제공된 어플리케이션 임을 표시하게 된다. 기본적으로 테스트 인증서로 서명되고 인터넷을 통해 배포된 ClickOnce 어플리케이션은 신로된 어플리케이션 배포(Trusted Application Deployment)을 이용할 수 없다.
대조적으로, 인증서 벤더 또는 기업 내 특정 부서- CA 를 통해 인증서를 발급받았다면, 그 인증서는 사용자에 보다 강력한 보안을 제공한다. 이는 제공자를 식별할 뿐 아니라 인증서를 서명한 CA의 신원을 확인하는 검증단계를 거치게 된다.
만일 CA가 루트 CA가 아니라면, AuthentiCode 는 Root CA까지 인증서를 발급한 CA를 검증하기 위해 확인하는 절차를 거치게 된다.
보다 강력한 보안을 위해 가능하다면, CA로 부터 발급된 인증서를 사용하도록 한다.
■ 테스트 인증서와 그 만료기간
인증서가 유효한(만료되지 않은 시점에) 배포(manifest)가 한 번 서명되었다면, 인증서가 이후에 만료되더라도 ClickOnce를 통한 어플리케이션 설치와 실행은 정상적으로 이루어진다.
(self-cert/test-cert 를 사용해 배포를 서명했더라도, 이후 설치와 실행은 해당 인증서 만료기간에 상관없이 유효함.)
■ 인증서 저장
인증서는 파일 시스템 내에 .pfx 파일로 저장할 수 있다. 또는 키 컨테이너 내에 저장할 수 도 있다. 도메인 상의 사용자는 여러 개의 키 컨테이너를 가진다. 기본적으로 MakeCert.exe 는 우리가 따로 pfx로 저장하도록 명시하지 않는 이상, 인증서를 개인적인(personal) 키 컨테이너에 저장할 것이다.
.NET Framework SDK 에 포함된 Mage.exe와 MageUI.exe는 ClickOnce 배포를 생성하기 위한 툴이며 파일(pfx) 또는 키 컨테이너에 저장된 인증서를 사용할 수 있게 지원한다.
신뢰된 어플리케이션 배포를 할 때, 조직은 Authenticode 인증서에 명시된 제공자가 클라이언트 컴퓨터의 신뢰된 제공자 목록으로 등록되도록 구성할 수 있다.
이후부터 해당 신뢰된 제공자에 의해 사인된 모든 ClickOnce 어플리케이션은 클라이언트 컴퓨터 상에서 높은 레벨의 신뢰를 부여받게 된다.
■ 권한 상승(Permission Elevation)
신뢰된 어플리케이션 배포는 사용자 컴퓨터에 대한 한번의 구성을 요구한다. AD에 의해 관리되는 데스크탑 환경인 경우, 이 구성은 Global Policy(그룹정책)을 이용해 수행될 수 있다. 만일 그렇지 않은 환경이라면, 권한 상승(permission elevation)을 대신 사용해야 한다.
만일 현재의 제공자가 신뢰된 제공자로 등록되지 않은 경우(클라이언트 머신 상에서), Trust Manager(보안을 관리하는 하나의 시스템)는 구동할 어플리케이션에게 상승된 권한을 허락할 것인지를 사용자에게 물어보는 권한 상승(Permission Elevation) 과정을 거치게 된다.
만일 권한 상승이관리자에 의해 비활성화 되면, 어플리케이션은 구동할 권한을 얻을 수 없다. 그래서 어플리케이션은 그저 작동하지 않을 것이며, 이 사실에 대한 어떠한 통지(notification)나 알림도 사용자에게 전달(표시)되지 않을 것이다.
권한 상승 과정을 수용할 수 없는 환경이라면, 아래의 명령을 클라이언트 상에서 먼저 수행케 하도록 하는 것을 검토할 수 도 있다.
작업 셋업 프로그램을 만들어서 웹으로 배포하든지, SMS(System Management Service)와 같은 인프라가 존재한다면, 자동 배포할 수도 있을 것이다.
아래는 클라이언트 컴퓨터 상에서 신뢰된 (인증서) 제공자(Truest Publisher)로 good.cer라는 파일에 명시된 제공자를 등록시키는 명령이다.
Good.cer는 makecert를 통해 생성할 수 있으며, 배포하고자 하는 어플리케이션의 인증서 제공자 정보가 포함되면 될 것이다.
certmgr.exe -add good.cer -c -s -r localMachine Root
ertmgr.exe -add good.cer -c -s -r localMachine TrustedPublisher
'IT > Dot Net' 카테고리의 다른 글
| C# 으로 안드로이드 또는 아이폰 어플 개발 (0) | 2011/04/06 |
|---|---|
| [FarPoint Spread]데이터와 헤더라벨을 고려한 컬럼너비 자동조정 구현 (0) | 2010/11/12 |
| [펌]Clickonce 인증서 만료시 해결책 - 기존 인증서 만료기간 수정 (0) | 2010/11/05 |
| [이벤트] Windows 7 BIG3 개발 고수되기! (0) | 2010/09/17 |
| FileTracker : error FTK1011 (2) | 2010/09/03 |
| CopySourceAsHtml 에러 수정 (0) | 2010/08/27 |
글
ClickOnce 업데이트 서버 구성 방법 정리
1. IIS 설치 후 FrontPage Server Extensions 2002 구성
구성이 되면 아래와 같이 별도 탭이 생성됨
2. IIS 셋팅 - 인증
3. IIS 셋팅 - HTTP 헤더 설정
콘텐츠 만료 지정 하고 즉시 만료로 하면 업데이트시 캐쉬를 신경쓰지 않아도 됨
사용자 지정 HTTP 헤더 확인 – 없으면 추가
4. IIS 셋팅 - ASP.NET 설정
현재 개발 프레임웍에 맞게끔 설정이 되어있는지 확인 MIME 형식 연결
MIME 설정은 ISS 전체에 하거나 아니면 해당 사이트만 해도 관계없음
MIME 형식(M) 들어가서 추가할 항목
| 확장명 | MIME 형식 |
| .application | application/x-ms-application |
| .deploy | application/octet-stream |
| .manifest | application/x-ms-manifest |
'IT > Dot Net' 카테고리의 다른 글
| 라이센스 컴파일러 대체법 - MSBuild 수정 (0) | 2008/10/14 |
|---|---|
| 네트웍 되는지 테스트 (0) | 2008/10/14 |
| ClickOnce 업데이트 서버 구성 방법 정리 (0) | 2008/07/30 |
| [펌] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper) (0) | 2008/07/21 |
| [펌] XAML Converter (0) | 2008/07/02 |
| [펌]ClickOnce - Uninstall (0) | 2008/06/06 |
글
[펌] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper)
출처 : http://dalbong2.net/46
프로덕트 XML 파일
부트스트래퍼(Bootstrapper)는 ClickOnce 애플리케이션이 구동되기 전에 애플리케이션에서 필요로 하는 필수 프로그램(prerequisties)이 먼저 설치되어 있는지를 확인하는 작은 부피의 프로그램을 말한다. Visual Studio.NET 2005에는 내장된 부트스트래퍼 기능이 있다. 우리는 이 기능을 사용하여 ClickOnce 애플리케이션이 실행되기전에 필요한 다른 컴포넌트를 설치할 수 있다.
달봉이는 지금까지 알고 있는 방법중에서 이전의 COM 컴포넌트나 .NET 어셈블리나 가리지 않고 클라이언트로 배포를 할 수 있는 가장 쉬운 방법중의 하나로 여기고 있다. 단점은 ClickOnce에서만 가능하다는 것이다.[현재 2006.09.16]
VS.NET의 부트스트래퍼 기능을 사용하기 위해서는 우선 컴포넌트를 설치하는 설치 프로그램(.exe or .msi)을 작성해야 한다. 그런 다음 이 설치 프로그램을 부트스트래퍼에 등록해야 한다. 그러기 위해서는 XML형식의 프로덕트 파일(product file)을 제작해야 한다.
프로덕트 파일
(파일을 클릭하면 선명한 그림이 뜹니다)
프로덕트 파일은 ClickOnce 프로그램이 실행되기 전에, 어떤 필수 프로그램들이 설치되어 있어야 하는지를 설명해주는 부트스트래퍼용 manifest 파일을 생성해준다. 프로덕트 파일에는 ClickOnce 애플리케이션이 필요로하는 필수 컴포넌트들을 설치하는 설치프로그램들에 대한 정보를 여러개 포함시킬 수 있다.
이 그림처럼 프로덕트 파일을 생성해서 설치 프로그램과 같이 적절한 위치에 두면 ( 달봉의 경로는 다음과 같다. C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages ) 아래 그림처럼 VS.NET의 게시 디자이너에서 필수 구성 요소 버튼을 클릭했을때 선택할 수 있는 박스에 나타나게 된다. 이제 필요한 프로그램을 선택해서 게시를 하면 된다.
VS.NET에서 필수 구성 요소 선택
(파일을 클릭하면 선명한 그림이 뜹니다)
이제 이 프로덕트 XML 파일을 제작하는 방법을 알아본다.
프로덕트 파일 제작
프로덕트 파일을 제작하기 위해서는 부트스트래퍼가 이해할 수 있는 규칙에 맞도록 작성해야 한다. 이런 XML 스키마는 다음 링크에서 찾아볼 수 있다.
Product and Package Schema Reference - msdn
http://msdn2.microsoft.com/en-us/library/ms229223.aspx (새 창으로 열기)
그렇지만 이 스키마를 이해하고 직접 손으로 작성하라고 하면 MS에 짜증이 날것이다. 이런 스키마가 있다면 이런 것을 제작할 수 있는 편집기도 주면 좋잖은가. 근데 아직 공식적으로 출시된 유틸 프로그램은 없는 것으로 안다. 다행히도 이 XML 파일을 생성해주는 편집 툴을 제공하는 훌륭한 분이 계시다.
프로덕트 파일 생성 툴
ClickOnce Bootstrapper Manifest Generator
자세한 내용은 Powertoys blog (새 창으로 열기)에서 볼 수 있다.
이제 이 툴을 사용하는 방법을 소개한다. 툴을 실행시키고 File->New를 선택한다.
(파일을 클릭하면 선명한 그림이 뜹니다)
Package Manifest 프로젝트 타입을 선택한다.
(파일을 클릭하면 선명한 그림이 뜹니다)
(파일을 클릭하면 선명한 그림이 뜹니다)
그림처럼 package 노드가 하나 기본적으로 생성되면 적절하게 package 이름을 입력한다. 이 이름은 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages 아래에 생성되는 폴더명이 될 것이다.
(파일을 클릭하면 선명한 그림이 뜹니다)
그런 다음 위 그림처럼 "Add Install File" 버튼을 클릭하면 아래처럼 설치파일을 추가할 수 있는 창이 뜬다.
적절한 설치파일을 검색해서 선택한다. 이 설치 파일은 ClickOnce 애플리케이션이 실행되기 전에 미리 설치되어 있어야 하는 컴포넌트를 클라이언트 PC에 설치하게 될 것이다. 달봉이는 임시로 iis60rkt.exe라는 파일을 선택하고 있다. ClickOnce 애플리케이션과는 전혀 상관없는 셋업 파일이긴 하지만.
(파일을 클릭하면 선명한 그림이 뜹니다)
그런 다음 적절한 display 명을 준다. 이 이름은 VS.NET의 필수 구성요소 선택하는 창에 출력될 것이다.
(파일을 클릭하면 선명한 그림이 뜹니다)
그런 다음 System Checks 탭을 선택한다. 이 탭에서는 이 컴포넌트가 이미 설치되었는지를 체크하는 로직을 선택할 수 있다. 설치 여부를 체크하는 로직은 여러가지를 제공하고 있다. 그림의 아이콘에 커서를 올려놓으면 설치 여부를 체크하는 로직으로
"File Check",
"Registry Check",
"Registry File Check",
"MSI Product Check",
"External Check",
"Assembly GAC Check"
등이 있음을 알 수 있다. File Check라는 것은 앞의 그림처럼 "어떤 경로의 폴더에 지정한 파일이 있으면 이미 이 PC에는 원하는 셋업이 이뤄져있다"는 것으로 간주하겠다는 것이다. 레지스트리에 특정 값이 있는지를 판단해서 설치여부를 판단할 수도 있다. 시스템 체크 로직에 대한 다른 구체적인 방법에 대해서는 앞에서 알려준 MSDN 링크 페이지 (새 창으로 열기)를 통해서 알아보길 바란다.
달봉이는 단순히 그림과 같은 경로에 iisTools.chm 파일이 있는지를 판단해서 그 결과값을 IIS60rktInstalled에 받아 두도록 하고 있다.
(파일을 클릭하면 선명한 그림이 뜹니다)
다음은 Install Conditions 탭을 선택한다. 이곳에서는 System Checks 탭에서 시스템의 상태를 체크한 값을 이용해서 값에 따라서 어떻게 할 것인지를 설정할 수 있다. 그림은 앞에서 설정된 IIS60rktInstalled 값이 0보다 크거나 같으면 그냥 설치를 통과하도록 설정하고 있다. IIS60rktInstalled 같은 변수에 어떤 값이 저장될 지는 시스템 체크 로직에 따라 다르다. 이런 구체적인 값도 앞에서 알려준 msdn 링크 (새 창으로 열기)를 참조하기 바란다.
(파일을 클릭하면 선명한 그림이 뜹니다)
다음은 Exit Codes 탭을 선택한다. 설치 파일이 exit code를 리턴하고 그것에 따라 실패, 성공, 재부팅들을 설정해줄 수가 있다. 달봉은 exit code에 대한 설정을 해 주지 않고 있다. 다만 아래 부분을 보면 "Use Default System Exit Codes"가 선택되어 있고 결과값으로 Fail이 선택되어 있는데, 이것은 설치 후 상태를 기본적으로 설치 실패로 설정하겠다는 것이다. 우리는 이것의 체크를 없애 줘야 한다.
(파일을 클릭하면 선명한 그림이 뜹니다)
그런 다음 저장 버튼을 클릭하면 지금까지 설정한 내용을 저장할 수 있다. 이때 저장된 내용은 우리가 원하는 xml 형식의 프로덕트 파일은 아니다. 이렇게 저장된 내용은 언제든지 다시 불러와서 재 편집을 할 수 있다(근데, 이 기능이 아직은 제대로 작동하지 않는듯하다)
(파일을 클릭하면 선명한 그림이 뜹니다)
우리가 원하는 xml의 프로덕트 파일을 최종적으로 만들어 내기 위해서는 위 그림처럼 "Project->Build" 메뉴를 선택해야 한다. 이 메뉴를 선택하고 나면 아래 그림처럼 결과가 나타난다.
(파일을 클릭하면 선명한 그림이 뜹니다)
이 그림은 최종적으로 프로덕트 파일이 저장된 경로(기본적으로 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages )와 프로덕트 파일을 생성하는과정에 남긴 로그를 보여주고 있다. 프로덕트 파일의 저장 경로는 "Project->Properties"에서 변경할 수 있다.
이렇게 해서 최종적인 프로덕트 파일이 생성되었고 적절한 폴더에 위치시켰다. 이제 VS.NET을 실행시키고 게시 디자이너를 통해서 필요한 설치 프로그램을 선택한 후 게시를 하면 된다.
--------------------------------------------------------------------------------
참조 문서
Product and Package Schema Reference - msdn
http://msdn2.microsoft.com/en-us/library/ms229223.aspx (새 창으로 열기)
ClickOnce Deployment Technology - Peter Bromberg
http://www.wise.com/Library/ClickOnce.pdf (새 창으로 열기)
ClickOnce : Bringing Ease and Reliability to SmartClient Deployment
http://www.code-magazine.com/article.aspx?quickid=0601041&page=1 (새 창으로 열기)
msdn : Deploying applications
http://msdn2.microsoft.com/en-us/library/6hbb4k3e(VS.80).aspx (새 창으로 열기)
'IT > Dot Net' 카테고리의 다른 글
| 네트웍 되는지 테스트 (0) | 2008/10/14 |
|---|---|
| ClickOnce 업데이트 서버 구성 방법 정리 (0) | 2008/07/30 |
| [펌] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper) (0) | 2008/07/21 |
| [펌] XAML Converter (0) | 2008/07/02 |
| [펌]ClickOnce - Uninstall (0) | 2008/06/06 |
| [펌]ClickOnce - 바탕화면 바로가기 (0) | 2008/06/06 |
글
[펌]ClickOnce - Uninstall
지난 두달 정말 다사다난한 기간이였다...
안팎으로 한꺼번에 많은 일들이 생겨 정신이 한개도 없는...
오랜만에 블로그를 쓰게되는군...
오늘 내용은 저번에도 언급했던 ClickOnce 삭제 메뉴 맨들기~
ClickOnce 로 설치된 프로그램을 제어판의 프로그램추가/삭제에서 하지 말고 메뉴를 강제로 만들어서 쓰자...뭐 이런 내용...
코딩은 간단하다. 바로가기 만들기의 소스에 약간의 코딩을 추가하여 시작/프로그램의 메뉴에 삭제실행 파일을 만들고 그 안에 stream 으로 삭제명령을 적는다는 이런 내용...
프로그램추가/삭제 때 내부적으로 사용되는 명령을 강제로 실행해주는 것 뿐이다.
바로가기때와 마찬가지로
함수안에 추가만 해주도록 하자.
1. 삭제실행파일 존재여부 체크
// 삭제실행파일 경로
string delFilePath = System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + @"\Programs\" + companyName + "\Uninstall.bat";
if (!System.IO.File.Exists(delFilePath)) {
// 파일이 없으면 맨들어주는거다!!
}
2. 삭제실행파일 껍데기 만들기(Uninstall.bat)
StreamReader reader = new StreamReader(startDir);
string result = reader.ReadToEnd();
reader.Close();
result = result.Substring(result.IndexOf("#") + 1);
Encoding _encoding = Encoding.GetEncoding(949);
StreamWriter writer = new StreamWriter(delFilePath
, false, _encoding);
3. 실제 명령줄 write 하기
// CommandLine 숨기고
writer.WriteLine("@echo off");
// 삭제명령어 쓰고
writer.WriteLine(@"start %windir%\system32\rundll32”
+.exe dfshim.dll,ShArpMaintain “+result);
// 빠져나오고
writer.WriteLine(@"exit");
writer.Close();
여기다가 추가로 바탕화면에 생성된 파로가기파일을 del 로 삭제해주고 bat 파일도 del 로 삭제해주는걸 넣어주는 쎈스~
이렇게 해서 만들어진것은 다음 그림과 같다.
뭐 파일명은 원하는대로 맨들고~
파일을 클릭하면 삭제confirm 창이 뜨고 삭제가 수행된다.
오...깔끕하게 삭제...물론 바탕화면 파일도 삭제...
내가 직접 탐색기에서 폴더 삭제했다 의심하지 말기를...--;;
이상으로 ClickOnce 확장은 접어두도록 해야겠다.
이제 TFS 프로그래밍에 대한 이야기를 해야하기 때문에...
원본 위치 <http://blog.naver.com/PostView.nhn?blogId=parky15&logNo=40051179921&categoryNo=2&viewdate=&cpage=1&listtype=0>
'IT > Dot Net' 카테고리의 다른 글
| [펌] ClickOnce 애플리케이션의 필수 프로그램 배포 - 부트스트래퍼(Bootstrapper) (0) | 2008/07/21 |
|---|---|
| [펌] XAML Converter (0) | 2008/07/02 |
| [펌]ClickOnce - Uninstall (0) | 2008/06/06 |
| [펌]ClickOnce - 바탕화면 바로가기 (0) | 2008/06/06 |
| 강제 메모리 회수 (0) | 2008/05/22 |
| XAML 관련링크 (0) | 2008/05/22 |
글
[펌]ClickOnce - 바탕화면 바로가기
얼마전 프로젝트를 달리는데 클릭원스를 사용하게 되었다.
그른데 기본 클릭원스 기능으로는 고객들이 만족스러워 하지 못한다구 하더군...
배포프로젝트를 통한 msi 나 exe 와는 다르게 클릭원스는 개발자입장에서는 매우 편리하지만
사용자 입장에서는 저 위에 꺼들과는 좀 기능이 떨어진다는...모...
대표적인것이 바탕화면에 바로가기가 설치 되지 않는다랄지...삭제할라믄 항상 제어판의 프로그램 추가/삭제를 통해서 해야된다랄지...
허긴 우리나라 사용자 입장에서 '제어판 들어가셔서요...프로그램 추가/삭제 가셔서요...그 프로그램 찾아서 삭제해주세요...' 라고 가이드 했다가는 '개똥아 머라구?' 라는 답만이 메아리 퍼질듯...
그래서 좀 찾아보니...안타깝게도 클릭원스 자체의 기능으로는 옵셔널 하게 그러한 기능은 제공하지 않는다...
그럼 우째야해? 결론은 날코딩...ㅠ.ㅠ
우선 오늘은 바탕화면에 바로가기 만들기 먼저...
바탕화면을 생성하려면 정말 단순하게 코딩으루 해당 어플리케이션의 바로가기를 복사해줘야 한다...--;;
그러면...실행할때마다 복사해줘야 하는게야?
다행스럽게도 닷넷 2.0 프레임웤에서는 배포시 첫 실행되는 시점을 알수 있는 기능을 제공한다. 그 시점을 캐취해서 첫실행 한번만 복사를 해주도록 하는것이다.
ApplicationDeployment 라는 클래스와...그 클래스의 IsFirstRun 라는 property...
구현은 간단하다...
1. 복사 메서드 만들기
우선 IsFirstRun 프로퍼티를 이용해서
Environment.SpecialFolder.StartMenu 를 통해 시작메뉴에 있는 어플리케이션을 복사해서
Environment.SpecialFolder.DesktopDirectory 의 바탕화면에
System.IO.File.Copy 을 이용해서 복사~~
2. 복사 메서드 호출하기
배포할 application 의 첫 시작 form 의 생성자나 Load 이벤트에서 위에서 구현한 메서드를 호출해주자.
다했다...쩝...예제를 간단하게 짜보면...
먼저, 해당 프로젝트에 참조추가를 통해 System.Deployment 라는 dll 을 추가해준다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Deployment.Application;
namespace WindowsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
// 바로가기 생성 함수~
private void CheckForShortcut() {
try {
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
// 처음 수행되는거니?
if (ad.IsFirstRun)
{
string companyName = "TheOneTech";
sring productName = "ParkApplication";
// 바탕화면 경로
string desktopDir =
System.Environment.GetFolderPath( Environment.SpecialFolder.DesktopDirectory)
+ @"\" + productName + ".appref-ms";
// 시작메뉴 경로
string startDir = System.Environment.GetFolderPath(
Environment.SpecialFolder.StartMenu)
+ @"\Programs\" + companyName + @"\"
+ productName + ".appref-ms";
// 조걸 요따가 복사
File.Copy(startDir, desktopDir, true);
}
}
catch
{
MessageBox.Show("봵");
}
}
private void Form1_Load(object sender, EventArgs e)
{
// 함수 호출
this.CheckForShortcut();
}
}
}
결론은~~~~
다했다...간단하다...아주 원시적인 방법이긴 하지만...이게 한계다...--;;
회사명하구 상품명은 Application 클래스에서 가져오든지 말든지...
뭐 더 좋은 방법을 알고 있는 분이 있으심 구원 좀 해주삼...
담에는 삭제 메뉴 생성하기...요곤 좀더 복잡...방법은 비슷함...
어잌후 TFS 두 정리 줌 해야하는데...ㅠ.ㅠ
'IT > Dot Net' 카테고리의 다른 글
| [펌] XAML Converter (0) | 2008/07/02 |
|---|---|
| [펌]ClickOnce - Uninstall (0) | 2008/06/06 |
| [펌]ClickOnce - 바탕화면 바로가기 (0) | 2008/06/06 |
| 강제 메모리 회수 (0) | 2008/05/22 |
| XAML 관련링크 (0) | 2008/05/22 |
| Visual Studio 2008과 .NET Framework 3.5의 새 기능 Link들 (0) | 2008/03/03 |
