/// <summary> /// 更新APP文件 /// </summary> /// <param name="model"></param> /// <returns></returns> private async Task UpdateAppFileAsync(UpdateAppFileModel model) { var appManager = ApplicationService.GetService <IAppService>(); string tempPath = Path.Combine(model.WorkingDirectory, $"Temp/{StringManager.GetRandomStrByGuid()}"); DirectoryInfo tempDirectoryInfo = null; if (!Directory.Exists(tempPath)) { tempDirectoryInfo = Directory.CreateDirectory(tempPath); } tempDirectoryInfo ??= new DirectoryInfo(tempPath); var cmdManager = new CmdManager(); string winRarCmd = Path.Combine(ApplicationConfig.WinRarPath, "UnRAR.exe"); await cmdManager.RunCmdCommandsAsync($"\"{winRarCmd}\" x -o+ -y {model.FilePath} {tempPath}"); DirectoryInfo[] directoryInfos = tempDirectoryInfo.GetDirectories(); string[] paths = directoryInfos.Select(m => m.Name).ToArray(); appManager.StopAppByPaths(paths); foreach (DirectoryInfo directoryInfo in directoryInfos) { try { string dirPath = Path.Combine(model.WorkingDirectory, directoryInfo.Name); CopyDirectory(directoryInfo, dirPath); } finally { directoryInfo.Delete(true); } } tempDirectoryInfo.Delete(true); }
public async Task UpdateAppAsync(IUploadFileModel file) { string workingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory !, "Application"); string saveDirectory = Path.Combine(workingDirectory, "Backup"); if (!Directory.Exists(saveDirectory)) { Directory.CreateDirectory(saveDirectory); } var model = new UpdateAppFileModel { WorkingDirectory = workingDirectory, FilePath = Path.Combine(saveDirectory, file.Name) }; file.SaveAs(model.FilePath); await UpdateAppFileAsync(model); }