클릭원스(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 두 정리 줌 해야하는데...ㅠ.ㅠ