From f41e2358a99cf9c81ff8f9f5dc52d596cb6e7d41 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Mon, 17 Jul 2023 08:15:56 -0400 Subject: [PATCH] Added logic to ensure assembly version being installed is equal to or greater than existing assembly --- .../Infrastructure/InstallationManager.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Oqtane.Server/Infrastructure/InstallationManager.cs b/Oqtane.Server/Infrastructure/InstallationManager.cs index fa856456..835350b6 100644 --- a/Oqtane.Server/Infrastructure/InstallationManager.cs +++ b/Oqtane.Server/Infrastructure/InstallationManager.cs @@ -201,7 +201,24 @@ namespace Oqtane.Infrastructure { Directory.CreateDirectory(Path.GetDirectoryName(filename)); } - entry.ExtractToFile(filename, true); + if (Path.Exists(filename) && Path.GetExtension(filename).ToLower() == ".dll") + { + // ensure assembly version is equal to or greater than existing assembly + var assembly = filename.Replace(Path.GetFileName(filename), "temp.dll"); + entry.ExtractToFile(assembly, true); + if (Version.Parse(FileVersionInfo.GetVersionInfo(assembly).FileVersion).CompareTo(Version.Parse(FileVersionInfo.GetVersionInfo(filename).FileVersion)) >= 0) + { + File.Move(assembly, filename, true); + } + else + { + File.Delete(assembly); + } + } + else + { + entry.ExtractToFile(filename, true); + } } catch {