实现客户端程序自动更新使用FTP

摘要:
最近的项目需要使用客户端自动更新功能。最初的想法是使用ClickOnce技术来完成它,但发现根线在实践中无法使用。原因如下:1)该项目应用于DevExpress控制包,并使用ClickOnce发布的自动更新过程。安装过程中,客户在GAC中找不到控件dll的错误。3) 最后,ClickOnce无法实现用户定义的安装文件夹。

 最近做的一个项目中需要用到客户端自动更新功能,最初的想法是利用ClickOnce技术来完成,但在实践中发现根本行不能,原因如下:

1)项目应用到了DevExpress控件包,用ClickOnce发布的自动更新程序,客户在安装时报在GAC中找不到控件dll的错。

2)ClickOnce安装无法实现根据用户安装时录入的参数(比如数据库服务器名、数据库用户名和密码等)来动态修改配置文件的功能。

3)最后一下其实不重要了,就是ClickOnce无法实现用户自定义安装文件夹。

  最后决定放弃使用ClickOnce,使用ftp方式进行,实现思路如下:用户启动程序时,先运行update.exe,该文件会自动比较本地配置文件和ftp服务器上配置文件的异同,会自动下载上次更新后变化的文件以及新加入的文件。(因为都是基本配置文件,所以开发了一个配置文件生成工具,用户只需要选择根目录后,就会自动生成配置文件。)文件下载结束后,再启动实际的客户端程序。

  程序的主要代码如:

1实现客户端程序自动更新使用FTP第1张using System;
  2实现客户端程序自动更新使用FTP第1张using System.Collections.Generic;
  3实现客户端程序自动更新使用FTP第1张using System.Diagnostics;
  4实现客户端程序自动更新使用FTP第1张using System.IO;
  5实现客户端程序自动更新使用FTP第1张using System.Net;
  6实现客户端程序自动更新使用FTP第1张using System.Threading;
  7实现客户端程序自动更新使用FTP第1张using System.Windows.Forms;
  8实现客户端程序自动更新使用FTP第1张
  9实现客户端程序自动更新使用FTP第1张namespace Update
 10实现客户端程序自动更新使用FTP第10张实现客户端程序自动更新使用FTP第11张实现客户端程序自动更新使用FTP第12张{
 11实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张    /**//// <summary>
 12实现客户端程序自动更新使用FTP第15张    /// Description: 
 13实现客户端程序自动更新使用FTP第15张    /// Author: ZhangRongHua
 14实现客户端程序自动更新使用FTP第15张    /// Create DateTime: 2009-6-21 12:25
 15实现客户端程序自动更新使用FTP第15张    /// UpdateHistory:      
 16实现客户端程序自动更新使用FTP第19张    /// </summary>

 17实现客户端程序自动更新使用FTP第15张    public partial class frmUpdate : Form
 18实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张    实现客户端程序自动更新使用FTP第12张{
 19实现客户端程序自动更新使用FTP第14张实现客户端程序自动更新使用FTP第25张        Fields#region Fields
 20实现客户端程序自动更新使用FTP第15张
 21实现客户端程序自动更新使用FTP第15张        private const string CONFIGFILE = "update.xml";
 22实现客户端程序自动更新使用FTP第15张        private const string UPDATEDIR = "PMS";
 23实现客户端程序自动更新使用FTP第15张        private string appPath = Application.StartupPath;
 24实现客户端程序自动更新使用FTP第15张        private List<ErrorInfo> errorList = new List<ErrorInfo>();
 25实现客户端程序自动更新使用FTP第15张        private string locFile = String.Concat(Application.StartupPath, "\\", CONFIGFILE);
 26实现客户端程序自动更新使用FTP第15张        private string tmpUpdateFile = "TmpUpdate.xml";
 27实现客户端程序自动更新使用FTP第15张        private List<string> updateList;
 28实现客户端程序自动更新使用FTP第15张        private string updateTmpPath = string.Concat(Path.GetTempPath(), "\\", UPDATEDIR);   
 29实现客户端程序自动更新使用FTP第15张        private string url = String.Empty;
 30实现客户端程序自动更新使用FTP第15张
 31实现客户端程序自动更新使用FTP第15张        private FTP ftp = null;
 32实现客户端程序自动更新使用FTP第15张
 33实现客户端程序自动更新使用FTP第19张        #endregion

 34实现客户端程序自动更新使用FTP第15张
 35实现客户端程序自动更新使用FTP第14张实现客户端程序自动更新使用FTP第25张        Delegates#region Delegates
 36实现客户端程序自动更新使用FTP第15张
 37实现客户端程序自动更新使用FTP第15张        public delegate void AsycDownLoadFile(string srcFile, string destFile, int i);
 38实现客户端程序自动更新使用FTP第15张
 39实现客户端程序自动更新使用FTP第15张        public delegate void ExecuteUpdateFiles(string srcPath, string destPath);
 40实现客户端程序自动更新使用FTP第15张
 41实现客户端程序自动更新使用FTP第15张        public delegate void UpdateComplete();
 42实现客户端程序自动更新使用FTP第15张
 43实现客户端程序自动更新使用FTP第15张        public delegate void UpdateUI(int i, string message);
 44实现客户端程序自动更新使用FTP第15张
 45实现客户端程序自动更新使用FTP第19张        #endregion

 46实现客户端程序自动更新使用FTP第15张
 47实现客户端程序自动更新使用FTP第15张        public event UpdateComplete OnUpdateComplete;
 48实现客户端程序自动更新使用FTP第15张
 49实现客户端程序自动更新使用FTP第14张实现客户端程序自动更新使用FTP第25张        Constructor#region Constructor
 50实现客户端程序自动更新使用FTP第15张
 51实现客户端程序自动更新使用FTP第15张        public frmUpdate()
 52实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
 53实现客户端程序自动更新使用FTP第15张            InitializeComponent();
 54实现客户端程序自动更新使用FTP第15张            OnUpdateComplete += new UpdateComplete(frmUpdate_OnUpdateComplete);
 55实现客户端程序自动更新使用FTP第19张        }

 56实现客户端程序自动更新使用FTP第15张
 57实现客户端程序自动更新使用FTP第19张        #endregion

 58实现客户端程序自动更新使用FTP第15张
 59实现客户端程序自动更新使用FTP第14张实现客户端程序自动更新使用FTP第25张        Event Handler#region Event Handler
 60实现客户端程序自动更新使用FTP第15张
 61实现客户端程序自动更新使用FTP第15张        private void frmUpdate_Load(object sender, EventArgs e)
 62实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
 63实现客户端程序自动更新使用FTP第15张           if(Directory.Exists(updateTmpPath))
 64实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张           实现客户端程序自动更新使用FTP第12张{
 65实现客户端程序自动更新使用FTP第15张               Directory.Delete(updateTmpPath, true);
 66实现客户端程序自动更新使用FTP第19张           }

 67实现客户端程序自动更新使用FTP第15张         
 68实现客户端程序自动更新使用FTP第15张            // 如果有主程序启动,则关闭
 69实现客户端程序自动更新使用FTP第15张            Process[] ps = Process.GetProcesses();
 70实现客户端程序自动更新使用FTP第15张            foreach (Process p in ps)
 71实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
 72实现客户端程序自动更新使用FTP第15张                //MessageBox.Show(p.ProcessName);
 73实现客户端程序自动更新使用FTP第15张                if (p.ProcessName.ToLower() == "wat.pms.winform")
 74实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                实现客户端程序自动更新使用FTP第12张{
 75实现客户端程序自动更新使用FTP第15张                    p.Kill();
 76实现客户端程序自动更新使用FTP第15张                    break;
 77实现客户端程序自动更新使用FTP第19张                }

 78实现客户端程序自动更新使用FTP第19张            }

 79实现客户端程序自动更新使用FTP第15张
 80实现客户端程序自动更新使用FTP第15张            GetUpdateFiles();
 81实现客户端程序自动更新使用FTP第19张        }

 82实现客户端程序自动更新使用FTP第15张
 83实现客户端程序自动更新使用FTP第15张        private void frmUpdate_OnUpdateComplete()
 84实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
 85实现客户端程序自动更新使用FTP第15张            ExecuteUpdateFiles dExecuteUpdateFiles = new ExecuteUpdateFiles(ExecuteUpdate);
 86实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            Invoke(dExecuteUpdateFiles, new object[] 实现客户端程序自动更新使用FTP第12张{updateTmpPath, appPath});
 87实现客户端程序自动更新使用FTP第19张        }

 88实现客户端程序自动更新使用FTP第15张
 89实现客户端程序自动更新使用FTP第15张        private void frmUpdate_Shown(object sender, EventArgs e)
 90实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
 91实现客户端程序自动更新使用FTP第15张            Thread updateThread = new Thread(new ThreadStart(DownLoadUpdateFiles));
 92实现客户端程序自动更新使用FTP第15张            updateThread.SetApartmentState(ApartmentState.STA);
 93实现客户端程序自动更新使用FTP第15张            updateThread.IsBackground = true;
 94实现客户端程序自动更新使用FTP第15张            Thread.Sleep(500);
 95实现客户端程序自动更新使用FTP第15张            updateThread.Start();
 96实现客户端程序自动更新使用FTP第15张
 97实现客户端程序自动更新使用FTP第15张  
 98实现客户端程序自动更新使用FTP第19张         }

 99实现客户端程序自动更新使用FTP第15张
100实现客户端程序自动更新使用FTP第19张        #endregion

101实现客户端程序自动更新使用FTP第15张
102实现客户端程序自动更新使用FTP第14张实现客户端程序自动更新使用FTP第25张        Private Methods#region Private Methods
103实现客户端程序自动更新使用FTP第15张
104实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张         /**//// <summary>
105实现客户端程序自动更新使用FTP第15张         /// 将目标文件替换为本地文件
106实现客户端程序自动更新使用FTP第15张         /// <remark> 
107实现客户端程序自动更新使用FTP第15张         /// Author:ZhangRongHua 
108实现客户端程序自动更新使用FTP第15张         /// Create DateTime: 2009-6-21 10:28
109实现客户端程序自动更新使用FTP第15张         /// Update History:     
110实现客户端程序自动更新使用FTP第15张         ///  </remark>
111实现客户端程序自动更新使用FTP第15张         /// </summary>
112实现客户端程序自动更新使用FTP第15张         /// <param name="srcFile">The SRC file.</param>
113实现客户端程序自动更新使用FTP第19张         /// <param name="destFile">The dest file.</param>

114实现客户端程序自动更新使用FTP第15张        private void DownLoadFile(string srcFile, string destFile)
115实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
116实现客户端程序自动更新使用FTP第15张            if(ftp == null )
117实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
118实现客户端程序自动更新使用FTP第15张                ftp = new FTP(Updater.URL, "", Updater.User, Updater.Password);
119实现客户端程序自动更新使用FTP第19张            }

120实现客户端程序自动更新使用FTP第15张
121实现客户端程序自动更新使用FTP第15张           
122实现客户端程序自动更新使用FTP第15张
123实现客户端程序自动更新使用FTP第15张            if(!ftp.Connected)
124实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
125实现客户端程序自动更新使用FTP第15张                MessageBox.Show("无法连接远程服务器,无法更新程序""提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
126实现客户端程序自动更新使用FTP第15张                Process.Start(Updater.MainProgram);
127实现客户端程序自动更新使用FTP第15张                Close();
128实现客户端程序自动更新使用FTP第15张                
129实现客户端程序自动更新使用FTP第19张            }

130实现客户端程序自动更新使用FTP第15张
131实现客户端程序自动更新使用FTP第15张            // 得到服务器端的配置文件
132实现客户端程序自动更新使用FTP第15张             ftp.Get(srcFile, updateTmpPath, destFile);
133实现客户端程序自动更新使用FTP第15张
134实现客户端程序自动更新使用FTP第15张          
135实现客户端程序自动更新使用FTP第15张 
136实现客户端程序自动更新使用FTP第19张        }

137实现客户端程序自动更新使用FTP第15张
138实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        /**//// <summary>
139实现客户端程序自动更新使用FTP第15张        /// 得到需要更新的文件清单
140实现客户端程序自动更新使用FTP第15张        /// <remark> 
141实现客户端程序自动更新使用FTP第15张        /// Author:ZhangRongHua 
142实现客户端程序自动更新使用FTP第15张        /// Create DateTime: 2009-6-21 10:29
143实现客户端程序自动更新使用FTP第15张        /// Update History:     
144实现客户端程序自动更新使用FTP第15张        ///  </remark>
145实现客户端程序自动更新使用FTP第19张        /// </summary>

146实现客户端程序自动更新使用FTP第15张        private void GetUpdateFiles()
147实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
148实现客户端程序自动更新使用FTP第15张            Updater.GetBaseInfo(locFile);
149实现客户端程序自动更新使用FTP第15张            url = Updater.URL;
150实现客户端程序自动更新使用FTP第15张            string svrFile = String.Concat(url, CONFIGFILE);
151实现客户端程序自动更新使用FTP第15张
152实现客户端程序自动更新使用FTP第15张            if (String.IsNullOrEmpty(svrFile))
153实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
154实现客户端程序自动更新使用FTP第15张                BroadCastOnUpdateComplete();
155实现客户端程序自动更新使用FTP第15张                return;
156实现客户端程序自动更新使用FTP第19张            }

157实现客户端程序自动更新使用FTP第15张
158实现客户端程序自动更新使用FTP第15张            Directory.CreateDirectory(updateTmpPath);
159实现客户端程序自动更新使用FTP第15张            try
160实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
161实现客户端程序自动更新使用FTP第15张                DownLoadFile(CONFIGFILE, tmpUpdateFile);
162实现客户端程序自动更新使用FTP第19张            }

163实现客户端程序自动更新使用FTP第15张            catch (Exception ex)
164实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
165实现客户端程序自动更新使用FTP第15张                MessageBox.Show("无法连接远程服务器,无法更新程序""提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
166实现客户端程序自动更新使用FTP第15张                Process.Start(Updater.MainProgram);
167实现客户端程序自动更新使用FTP第15张                Close();
168实现客户端程序自动更新使用FTP第19张            }

169实现客户端程序自动更新使用FTP第15张
170实现客户端程序自动更新使用FTP第15张            updateList = Updater.GetUpdateFileList(locFile, tmpUpdateFile);
171实现客户端程序自动更新使用FTP第15张            if (updateList == null || updateList.Count < 1)
172实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
173实现客户端程序自动更新使用FTP第15张                BroadCastOnUpdateComplete();
174实现客户端程序自动更新使用FTP第15张                return;
175实现客户端程序自动更新使用FTP第19张            }

176实现客户端程序自动更新使用FTP第15张
177实现客户端程序自动更新使用FTP第15张            pbUpdate.Maximum = updateList.Count;
178实现客户端程序自动更新使用FTP第15张            pbUpdate.Minimum = 0;
179实现客户端程序自动更新使用FTP第15张            lblInfo.Text = String.Concat(updateList.Count, "个文件需要更新!");
180实现客户端程序自动更新使用FTP第15张            lblInfo.BringToFront();
181实现客户端程序自动更新使用FTP第15张            lblState.BringToFront();
182实现客户端程序自动更新使用FTP第15张            lblInfo.Update();
183实现客户端程序自动更新使用FTP第15张
184实现客户端程序自动更新使用FTP第15张            pbUpdate.Maximum = updateList.Count;
185实现客户端程序自动更新使用FTP第15张            pbUpdate.Minimum = 0;
186实现客户端程序自动更新使用FTP第15张
187实现客户端程序自动更新使用FTP第15张            for (int i = 0; i < updateList.Count; i++)
188实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
189实现客户端程序自动更新使用FTP第15张                string file = updateList[i];
190实现客户端程序自动更新使用FTP第15张                ListViewItem lvItem = new ListViewItem();
191实现客户端程序自动更新使用FTP第15张                lvItem.Text = file;
192实现客户端程序自动更新使用FTP第15张                lvItem.SubItems.Add(Updater.MainProgramVersion);
193实现客户端程序自动更新使用FTP第15张                lvUpdateList.Items.Add(lvItem);
194实现客户端程序自动更新使用FTP第19张            }

195实现客户端程序自动更新使用FTP第19张        }

196实现客户端程序自动更新使用FTP第15张
197实现客户端程序自动更新使用FTP第15张        private void UpdateUIInfo(int i, string message)
198实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
199实现客户端程序自动更新使用FTP第15张            pbUpdate.Value = i + 1;
200实现客户端程序自动更新使用FTP第15张            lblState.Text = message;
201实现客户端程序自动更新使用FTP第15张            lblState.Update();
202实现客户端程序自动更新使用FTP第19张        }

203实现客户端程序自动更新使用FTP第15张
204实现客户端程序自动更新使用FTP第15张        private void BroadCastOnUpdateComplete()
205实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
206实现客户端程序自动更新使用FTP第15张            if (OnUpdateComplete != null)
207实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
208实现客户端程序自动更新使用FTP第15张                OnUpdateComplete();
209实现客户端程序自动更新使用FTP第19张            }

210实现客户端程序自动更新使用FTP第19张        }

211实现客户端程序自动更新使用FTP第15张
212实现客户端程序自动更新使用FTP第15张        private void DownLoadUpdateFiles()
213实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
214实现客户端程序自动更新使用FTP第15张            if (updateList == null || updateList.Count < 1)
215实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
216实现客户端程序自动更新使用FTP第15张                BroadCastOnUpdateComplete();
217实现客户端程序自动更新使用FTP第15张                return;
218实现客户端程序自动更新使用FTP第19张            }

219实现客户端程序自动更新使用FTP第15张
220实现客户端程序自动更新使用FTP第15张            try
221实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
222实现客户端程序自动更新使用FTP第15张                UpdateUI dUpdateUI = new UpdateUI(UpdateUIInfo);
223实现客户端程序自动更新使用FTP第15张                AsycDownLoadFile dAsycDownLoadFile = new AsycDownLoadFile(DownLoadFile);
224实现客户端程序自动更新使用FTP第15张                for (int i = 0; i < updateList.Count; i++)
225实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                实现客户端程序自动更新使用FTP第12张{
226实现客户端程序自动更新使用FTP第15张                    string file = updateList[i];
227实现客户端程序自动更新使用FTP第15张                    string destFile = String.Concat(updateTmpPath, "\\", file);
228实现客户端程序自动更新使用FTP第15张                    string destFileName = destFile.Substring(destFile.LastIndexOf("/"+ 1);
229实现客户端程序自动更新使用FTP第15张                    string srcFile = String.Concat(url, file);
230实现客户端程序自动更新使用FTP第15张                    var srcFileName = file.Trim('/');
231实现客户端程序自动更新使用FTP第15张                    destFile = destFile.Replace("/""\\");
232实现客户端程序自动更新使用FTP第15张                    Directory.CreateDirectory(destFile.Substring(0, destFile.LastIndexOf("\\")));
233实现客户端程序自动更新使用FTP第15张                    string curentFile = String.Concat("正在更新第", i + 1"/", updateList.Count, "", file);
234实现客户端程序自动更新使用FTP第15张                   
235实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                    Invoke(dAsycDownLoadFile, new object[] 实现客户端程序自动更新使用FTP第12张{ srcFileName, srcFileName, i });
236实现客户端程序自动更新使用FTP第15张                    Thread.Sleep(50);
237实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                    Invoke(dUpdateUI, new object[] 实现客户端程序自动更新使用FTP第12张{i, curentFile});
238实现客户端程序自动更新使用FTP第19张                }

239实现客户端程序自动更新使用FTP第19张            }

240实现客户端程序自动更新使用FTP第15张            catch (Exception ex)
241实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
242实现客户端程序自动更新使用FTP第15张                Debug.WriteLine(ex.Message);
243实现客户端程序自动更新使用FTP第19张            }

244实现客户端程序自动更新使用FTP第15张
245实现客户端程序自动更新使用FTP第15张            BroadCastOnUpdateComplete();
246实现客户端程序自动更新使用FTP第19张        }

247实现客户端程序自动更新使用FTP第15张
248实现客户端程序自动更新使用FTP第15张        
249实现客户端程序自动更新使用FTP第15张
250实现客户端程序自动更新使用FTP第15张        private void CopyUpdateFiles(string srcPath, string destPath)
251实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
252实现客户端程序自动更新使用FTP第15张            string[] files = Directory.GetFiles(srcPath);
253实现客户端程序自动更新使用FTP第15张            for (int i = 0; i < files.Length; i++)
254实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
255实现客户端程序自动更新使用FTP第15张                string srcFile = files[i];
256实现客户端程序自动更新使用FTP第15张                string destFile = string.Concat(destPath, "\\", Path.GetFileName(srcFile));
257实现客户端程序自动更新使用FTP第15张                try
258实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                实现客户端程序自动更新使用FTP第12张{
259实现客户端程序自动更新使用FTP第15张                    File.Copy(srcFile, destFile, true);
260实现客户端程序自动更新使用FTP第19张                }

261实现客户端程序自动更新使用FTP第15张                catch (System.IO.IOException  ex)
262实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张                实现客户端程序自动更新使用FTP第12张{
263实现客户端程序自动更新使用FTP第15张                    
264实现客户端程序自动更新使用FTP第15张                    
265实现客户端程序自动更新使用FTP第19张                }

266实现客户端程序自动更新使用FTP第15张                 
267实现客户端程序自动更新使用FTP第19张            }

268实现客户端程序自动更新使用FTP第15张
269实现客户端程序自动更新使用FTP第15张            string[] dirs = Directory.GetDirectories(srcPath);
270实现客户端程序自动更新使用FTP第15张            for (int i = 0; i < dirs.Length; i++)
271实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
272实现客户端程序自动更新使用FTP第15张                srcPath = dirs[i];
273实现客户端程序自动更新使用FTP第15张                string tmpDestPath = String.Concat(destPath, "\\", Path.GetFileName(srcPath));
274实现客户端程序自动更新使用FTP第15张                Directory.CreateDirectory(tmpDestPath);
275实现客户端程序自动更新使用FTP第15张                CopyUpdateFiles(srcPath, tmpDestPath);
276实现客户端程序自动更新使用FTP第19张            }

277实现客户端程序自动更新使用FTP第19张        }

278实现客户端程序自动更新使用FTP第15张
279实现客户端程序自动更新使用FTP第15张
280实现客户端程序自动更新使用FTP第15张
281实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        /**//// <summary>
282实现客户端程序自动更新使用FTP第15张        /// 更新完成后,要执行的动作(将下载的文件从临时目录复制到主目录,重启主程序)
283实现客户端程序自动更新使用FTP第15张        /// <remark> 
284实现客户端程序自动更新使用FTP第15张        /// Author:ZhangRongHua 
285实现客户端程序自动更新使用FTP第15张        /// Create DateTime: 2009-6-21 12:25
286实现客户端程序自动更新使用FTP第15张        /// Update History:     
287实现客户端程序自动更新使用FTP第15张        ///  </remark>
288实现客户端程序自动更新使用FTP第15张        /// </summary>
289实现客户端程序自动更新使用FTP第15张        /// <param name="srcPath">The SRC path.</param>
290实现客户端程序自动更新使用FTP第19张        /// <param name="destPath">The dest path.</param>

291实现客户端程序自动更新使用FTP第15张        private void ExecuteUpdate(string srcPath, string destPath)
292实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
293实现客户端程序自动更新使用FTP第15张            if (errorList != null && errorList.Count < 1)
294实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
295实现客户端程序自动更新使用FTP第15张                lblInfo.Text = "正在执行更新";
296实现客户端程序自动更新使用FTP第15张                lblInfo.Update();
297实现客户端程序自动更新使用FTP第15张                CopyUpdateFiles(srcPath, destPath);
298实现客户端程序自动更新使用FTP第15张                File.Copy(tmpUpdateFile, locFile, true);
299实现客户端程序自动更新使用FTP第19张            }

300实现客户端程序自动更新使用FTP第15张            Process.Start(Updater.MainProgram);
301实现客户端程序自动更新使用FTP第15张
302实现客户端程序自动更新使用FTP第15张            Close();
303实现客户端程序自动更新使用FTP第19张        }

304实现客户端程序自动更新使用FTP第15张
305实现客户端程序自动更新使用FTP第15张        private void DownLoadFile(string srcFile, string destFile, ListViewItem lvItem)
306实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
307实现客户端程序自动更新使用FTP第15张            try
308实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
309实现客户端程序自动更新使用FTP第15张                DownLoadFile(srcFile, destFile);
310实现客户端程序自动更新使用FTP第15张                lvItem.SubItems.Add("Ok");
311实现客户端程序自动更新使用FTP第19张             }

312实现客户端程序自动更新使用FTP第15张            catch (Exception ex)
313实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
314实现客户端程序自动更新使用FTP第15张                Debug.WriteLine(ex.Message);
315实现客户端程序自动更新使用FTP第15张                lvItem.SubItems.Add("fail");
316实现客户端程序自动更新使用FTP第15张                ErrorInfo errorInfo = new ErrorInfo();
317实现客户端程序自动更新使用FTP第15张                errorInfo.File = srcFile;
318实现客户端程序自动更新使用FTP第15张                errorInfo.ErrorLevel = ErrorLevel.Serious;
319实现客户端程序自动更新使用FTP第15张                errorInfo.Message = ex.Message;
320实现客户端程序自动更新使用FTP第15张                errorList.Add(errorInfo);
321实现客户端程序自动更新使用FTP第19张            }

322实现客户端程序自动更新使用FTP第19张        }

323实现客户端程序自动更新使用FTP第15张
324实现客户端程序自动更新使用FTP第15张        private void DownLoadFile(string srcFile, string destFile, int i)
325实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张        实现客户端程序自动更新使用FTP第12张{
326实现客户端程序自动更新使用FTP第15张            ListViewItem lvItem = lvUpdateList.Items[i];
327实现客户端程序自动更新使用FTP第15张
328实现客户端程序自动更新使用FTP第15张            lvUpdateList.Items[i].EnsureVisible();
329实现客户端程序自动更新使用FTP第15张            try
330实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
331实现客户端程序自动更新使用FTP第15张                DownLoadFile(srcFile, destFile);
332实现客户端程序自动更新使用FTP第15张                lvItem.SubItems.Add("Ok");
333实现客户端程序自动更新使用FTP第19张            }

334实现客户端程序自动更新使用FTP第15张            catch (Exception ex)
335实现客户端程序自动更新使用FTP第13张实现客户端程序自动更新使用FTP第14张            实现客户端程序自动更新使用FTP第12张{
336实现客户端程序自动更新使用FTP第15张                Debug.WriteLine(ex.Message);
337实现客户端程序自动更新使用FTP第15张                lvItem.SubItems.Add("fail");
338实现客户端程序自动更新使用FTP第15张                ErrorInfo errorInfo = new ErrorInfo();
339实现客户端程序自动更新使用FTP第15张                errorInfo.File = srcFile;
340实现客户端程序自动更新使用FTP第15张                errorInfo.ErrorLevel = ErrorLevel.Serious;
341实现客户端程序自动更新使用FTP第15张                errorInfo.Message = ex.Message;
342实现客户端程序自动更新使用FTP第15张                errorList.Add(errorInfo);
343实现客户端程序自动更新使用FTP第15张                MessageBox.Show(destFile);
344实现客户端程序自动更新使用FTP第19张            }

345实现客户端程序自动更新使用FTP第19张        }

346实现客户端程序自动更新使用FTP第15张
347实现客户端程序自动更新使用FTP第19张        #endregion

348实现客户端程序自动更新使用FTP第19张    }

349实现客户端程序自动更新使用FTP第442张}


出处:http://zhangronghua.cnblogs.com

免责声明:文章转载自《实现客户端程序自动更新使用FTP》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx后端节点健康检查Databricks 第5篇:Databricks文件系统(DBFS)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Unity3D 批量图片资源导入设置

原地址:http://blog.csdn.net/asd237241291/article/details/8433548 创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【119706192】 本文链接地址: Unity3D 批量图片资源导入设置 复制代码 usingUnityEngine; usingSystem.Colle...

C# 断点续传原理与实现

在了解HTTP断点续传的原理之前,让我们先来了解一下HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由 客户机(浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议。回复协议是由服务器(web server),向客户机(浏览器)回复报文时的协议。请求和回复协议都由头和体组成。头和体之间以一行空行为分隔。 以下...

Perl模式匹配

       Perl 内置的模式匹配让你能够简便高效地搜索大量的数据。不管你是在一个巨型的商业门户站点上用于扫描每日感兴趣的珍闻报道,还是在一个政府组织里用于精确地描述人口统计(或者人类基因组图),或是在一个教育组织里用于在你的 web 站点上生成一些动态信息,Perl 都是你可选的工具。这里的一部分原因是 Perl 的数据库联接能力,但是更重要的原因是...

读取FTP上的excel文件,并写入数据库

今天遇到一些问题,需要从ftp上读取一些excel文件,并需要将excel中的数据写入到数据库,这样就可以通过管理页面查看这些数据。 我将相关工作分为三步,1、从ftp上读取相关文件,并将excel文件下载到本地。2、读取本地下载完成的excel,读取相关信息 3、将读取的信息存储到数据库中。 1、获取java操作ftp操作,首先要从maven仓库http...

ExecuteReader: Connection 属性尚未初始化。错误解决

读取student表中的数据打印到屏幕,代码 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string sqlc = @"server=.\sqlexpress;database=MyDataBase1...

解析数据库连接字符串 (将Data Source、Initial Catalog、User ID、Password取出)

private void AnalysisConnectionstring() { string tempStr = “Data Source=192.168.2.123;Initial Catalog=caxastat;Persist Security Info=True;User ID=sa;Passwor...