분노의 챔질

C# WebClient를 이용한 자동업데이트 본문

Programming/C#

C# WebClient를 이용한 자동업데이트

분노의블로그 2010. 2. 23. 10:32
반응형

 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