WorkaHolic

ClickOnce 확장 - 바탕화면 바로가기 만들기

2008. 5. 28. 18:05
반응형
클릭원스(ClickOnce) 좀더 확장...바탕화면에 바로가기 맨들기 먹고사는짓_내꺼

[출처] 클릭원스(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";
                    string 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 두 정리 줌 해야하는데...ㅠ.ㅠ


반응형