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; } /// /// 更新压缩包 /// 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); } } } /// /// 初始化重要文件备份目录 /// private void initDir() { if (Directory.Exists(criticalBackupDir)) { Directory.Delete(criticalBackupDir, true); } Directory.CreateDirectory(criticalBackupDir); } /// /// 回滚 /// 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); } }