본문 바로가기

IT/Dot Net

[펌]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 정리 해야하는데....    

출처 <http://blog.naver.com/PostView.nhn?blogId=parky15&logNo=40047618806&categoryNo=2&viewdate=&cpage=&postListTopCurrentPage=1

'IT > Dot Net' 카테고리의 다른 글

[펌] XAML Converter  (0) 2008.07.02
[펌]ClickOnce - Uninstall  (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