분노의 챔질
C# WebClient를 이용한 자동업데이트 본문
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Net;
using System.IO;
using System.Diagnostics;
namespace WebClientTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.Items.Add("1");
listView1.Items[0].SubItems.Add("test.exe");
listView1.Items[0].SubItems.Add("");
listView1.Items.Add("2");
listView1.Items[1].SubItems.Add("ClientModule.dll");
listView1.Items[1].SubItems.Add("");
listView1.Items.Add("3");
listView1.Items[2].SubItems.Add("Launcher.exe");
listView1.Items[2].SubItems.Add("");
}
[DllImport("kernel32.dll")]
private static extern int GetPrivateProfileString( // INI Read
String section,
String key,
String def,
StringBuilder retVal,
int size,
String filePath);
// INI Write를 위한 API 선언
[DllImport("kernel32.dll")]
private static extern long WritePrivateProfileString( // INI Write
String section,
String key,
String val,
String filePath);
// INI 에서 값을 가져온다
public String GetIniValue(String Section, String Key, String iniPath)
{
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfileString(Section, Key, "", temp, 255, iniPath);
return temp.ToString();
}
// INI 값 설정
public void SetIniValue(String Section, String Key, String Value, String iniPath)
{
WritePrivateProfileString(Section, Key, Value, iniPath);
}
private void button1_Click(object sender, EventArgs e)
{
Uri address = new Uri(@"http://localhost.com:8000/Update/");
string downpath = @"d:\Temp\";
//버전검사
WebClient wc = new WebClient();
wc.DownloadFile(address.ToString() + "setting.ini", downpath + "setting.ini");
FileInfo f = new FileInfo(downpath + "setting.ini");
int ver = 0, ver2;
try
{
ver = Int32.Parse(GetIniValue("VERSION", "ver", downpath + "ver.ini"));
}
catch (Exception)
{
f.CopyTo(downpath + "ver.ini");
SetIniValue("VERSION", "ver", "000", downpath + "ver.ini");
}
ver2 = Int32.Parse(GetIniValue("VERSION", "ver", downpath + "setting.ini"));
if (ver.Equals(ver2))
{
//업데이트가 필요없다면 일어나는 작업....
//Process.Start("Launcher.exe");
File.Delete(downpath + "setting.ini");
}
else
{
WebClient webclient = new WebClient();
for (int i = 0; i < listView1.Items.Count; i++)
{
listView1.Items[i].SubItems[2].Text = "전송중";
this.Refresh();
webclient.DownloadFile(new Uri(address.ToString() + listView1.Items[i].SubItems[1].Text), downpath + listView1.Items[i].SubItems[1].Text);
listView1.Items[i].SubItems[2].Text = "전송완료";
progressBar1.Value = (progressBar1.Maximum / listView1.Items.Count) * (i + 1);
}
//클라이언트의 버전을 매칭
SetIniValue("VERSION", "ver", GetIniValue("VERSION", "ver", downpath + "setting.ini"), downpath + "ver.ini");
File.Delete(downpath + "setting.ini");
//Process.Start("Launcher.exe");
}
}
}
}
server에 setting.ini와 다운받을 파일
클라이언트 다운받을 폴더에 ver.ini
ini파일의 내용
[VERSION]
ver=001
클라이언트는 ver값을 틀리게 해줘야겠죠!
허접한 프로그램
'Programming > C#' 카테고리의 다른 글
C# DB연결하기 (0) | 2010.02.23 |
---|---|
C# Assembly.LoadFrom() DLL불러오기 (0) | 2010.02.23 |
C# PDF파일 다루기 (1) | 2010.02.23 |
C# File to ByteArray (0) | 2010.02.23 |
C# DevExpress 스킨변경 (0) | 2010.02.23 |