华恒Mes鼎捷代码
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.

178 lines
5.2 KiB

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();
}
}
}