You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Diagnostics; using System.Windows.Forms; using System.Threading;
namespace ICSSoft.AutoUpdate.Edition.SetupPatch { public class patchSetUp { private string CurrEdition = "";
private string CurrFolderPath = "";
private string PathFolderPath = "";
private string ProgramPath = "";
private string CurrExePath = "";
public patchSetUp(string _CurrEdition, string PathFolder, string ProgramName) { if (PathFolder == "") { PathFolder = "pathTemp"; } if (ProgramName == "") { ProgramName = "ICSSoft.Frame.Main.Entrance.exe"; } CurrEdition = _CurrEdition; CurrFolderPath = Directory.GetCurrentDirectory(); PathFolderPath = CurrFolderPath + "\\" + PathFolder; ProgramPath = CurrFolderPath + "\\" + ProgramName; string strFullPath = Application.ExecutablePath; string strFileName = System.IO.Path.GetFileName(strFullPath);
CurrExePath = Path.GetFullPath(CurrFolderPath + "\\" + strFileName); }
public void Do() { DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在安装补丁...请稍等...."); _wait.Show(); try { ///安装补丁
pathSetUp(); ///删除补丁
///写入版本号
///
WriteEdition();
///运行主程序
///
RunMainProgram(); } catch (Exception ex) { ///回滚补丁安装
pathRollBack(); throw ex; } }
private void pathSetUp() {
try { CopyFolder(PathFolderPath, CurrFolderPath); } catch (Exception ex) {
throw ex; } }
private void CopyFolder(string sourcePath, string destPath) { if (Directory.Exists(sourcePath)) { if (!Directory.Exists(destPath)) { //目标目录不存在则创建
try { Directory.CreateDirectory(destPath); } catch (Exception ex) { throw new Exception("创建目标目录失败:" + ex.Message); } } //获得源文件下所有文件
List<string> files = new List<string>(Directory.GetFiles(sourcePath)); files.ForEach(c => { string destFile = Path.Combine(new string[] { destPath, Path.GetFileName(c) }); if (Path.GetFullPath(destFile) != CurrExePath) { File.Copy(c, destFile, true);//覆盖模式
if (System.IO.File.GetAttributes(destFile).ToString().IndexOf("ReadOnly") != -1) { File.SetAttributes(destFile, FileAttributes.Normal); } } }); //获得源文件下所有目录文件
List<string> folders = new List<string>(Directory.GetDirectories(sourcePath)); folders.ForEach(c => { string destDir = Path.Combine(new string[] { destPath, Path.GetFileName(c) }); //采用递归的方法实现
CopyFolder(c, destDir); }); } else { throw new DirectoryNotFoundException("源目录不存在!"); } }
private void pathRollBack() {
}
private void WriteEdition() { string FilePath = System.Environment.CurrentDirectory; if (!Directory.Exists(FilePath + "\\BaseServiceConfig")) { Directory.CreateDirectory(FilePath + "\\BaseServiceConfig"); } if (!File.Exists(FilePath + "\\BaseServiceConfig\\Edition.ini")) { using (File.Create(FilePath + "\\BaseServiceConfig\\Edition.ini")) { } }
using (StreamWriter sw = new StreamWriter(FilePath + "\\BaseServiceConfig\\Edition.ini")) { sw.WriteLine(CurrEdition); } }
private void RunMainProgram() {
if (!File.Exists(ProgramPath)) { throw new Exception("主程序查找失败,请手动运行"); } System.Diagnostics.ProcessStartInfo p = null; System.Diagnostics.Process proc; p = new System.Diagnostics.ProcessStartInfo(ProgramPath);
proc = System.Diagnostics.Process.Start(p);//调用外部程序
Application.Exit();
} } }
|