126 lines
3.7 KiB
C#
126 lines
3.7 KiB
C#
using MasstransferInfrastructure.OTA.Client;
|
|
using MasstransferInfrastructure.OTA.Model;
|
|
|
|
namespace MasstransferInfrastructure.OTA.Service;
|
|
|
|
public class OTAService
|
|
{
|
|
private readonly OTAClient _otaClient;
|
|
|
|
private readonly string appDir;
|
|
private readonly string criticalBackupDir;
|
|
private readonly string criticalSourceLogPath;
|
|
private readonly string[] criticalFileExtension;
|
|
private readonly string previousBackupPath;
|
|
private readonly string updatePackagePath;
|
|
|
|
|
|
public OTAService(string AppDir, string CriticalBackupDir, string CriticalSourceLogPath, string[] CriticalFileExtension, string PreviousBackupPath, string UpdatePackagePath)
|
|
{
|
|
_otaClient = new OTAClient();
|
|
appDir = AppDir;
|
|
criticalBackupDir = CriticalBackupDir;
|
|
criticalSourceLogPath = CriticalSourceLogPath;
|
|
criticalFileExtension = CriticalFileExtension;
|
|
previousBackupPath = PreviousBackupPath;
|
|
updatePackagePath = UpdatePackagePath;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新压缩包
|
|
/// </summary>
|
|
public void Update()
|
|
{
|
|
try
|
|
{
|
|
//初始化
|
|
initDir();
|
|
|
|
//备份重要文件
|
|
_otaClient.BackupEssentialFiles(appDir, criticalBackupDir, criticalFileExtension, criticalSourceLogPath);
|
|
|
|
//备份旧版本文件
|
|
_otaClient.CompressDirectory(appDir, previousBackupPath);
|
|
|
|
try
|
|
{
|
|
//删除旧版本原文件
|
|
_otaClient.DeleteDirectory(appDir);
|
|
|
|
//解压更新包
|
|
_otaClient.ExtractDirectory(updatePackagePath, appDir);
|
|
|
|
//恢复重要文件
|
|
_otaClient.RecoverCriticalFiles(criticalSourceLogPath);
|
|
|
|
//删除旧版本备份文件
|
|
_otaClient.DeleteFile(previousBackupPath);
|
|
|
|
//删除更新包
|
|
_otaClient.DeleteFile(updatePackagePath);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RollBack();
|
|
Console.WriteLine($"更新异常,已回滚: {ex.Message}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"更新异常e: {ex.Message}");
|
|
|
|
//如果重要文件备份已经产生,则删除
|
|
if(Directory.Exists(criticalBackupDir))
|
|
{
|
|
_otaClient.DeleteDirectory(criticalBackupDir);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化重要文件备份目录
|
|
/// </summary>
|
|
private void initDir()
|
|
{
|
|
if (Directory.Exists(criticalBackupDir))
|
|
{
|
|
Directory.Delete(criticalBackupDir, true);
|
|
}
|
|
Directory.CreateDirectory(criticalBackupDir);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 回滚
|
|
/// </summary>
|
|
private void RollBack()
|
|
{
|
|
//删除安装过程中创建的文件、目录
|
|
var directoryList = new string[] { appDir, criticalBackupDir};
|
|
var filePath = new String[] { updatePackagePath };
|
|
|
|
foreach (var directory in directoryList)
|
|
{
|
|
if (Directory.Exists(directory))
|
|
{
|
|
_otaClient.DeleteDirectory(directory);
|
|
}
|
|
}
|
|
|
|
foreach (var file in filePath)
|
|
{
|
|
if (File.Exists(file))
|
|
{
|
|
_otaClient.DeleteFile(file);
|
|
}
|
|
}
|
|
|
|
//恢复旧版本文件
|
|
_otaClient.ExtractDirectory(previousBackupPath, appDir);
|
|
|
|
//删除旧版本备份
|
|
_otaClient.DeleteFile(previousBackupPath);
|
|
|
|
}
|
|
} |