From 8afeadf55b278ccfcf7fc9e1ea815f16cfcecd80 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Tue, 3 Sep 2024 13:49:25 +0200 Subject: [PATCH 1/3] Setting the version number on files inside the MSI prevents broken upgrades. This fixes #5233 --- ReleaseBuilder/Build/Command.Compile.Post.cs | 3 --- ReleaseBuilder/Build/Command.CreatePackage.cs | 2 +- ReleaseBuilder/WixHeatBuilder.cs | 17 ++++++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ReleaseBuilder/Build/Command.Compile.Post.cs b/ReleaseBuilder/Build/Command.Compile.Post.cs index ab446c704..0b269bac6 100644 --- a/ReleaseBuilder/Build/Command.Compile.Post.cs +++ b/ReleaseBuilder/Build/Command.Compile.Post.cs @@ -1,7 +1,4 @@ -using System.IO.Compression; -using System.Net; using System.Text.RegularExpressions; -using Duplicati.Library.Utility; namespace ReleaseBuilder.Build; diff --git a/ReleaseBuilder/Build/Command.CreatePackage.cs b/ReleaseBuilder/Build/Command.CreatePackage.cs index 5089a2770..608736ecf 100644 --- a/ReleaseBuilder/Build/Command.CreatePackage.cs +++ b/ReleaseBuilder/Build/Command.CreatePackage.cs @@ -258,7 +258,7 @@ public static partial class Command if (File.Exists(binFiles)) File.Delete(binFiles); - File.WriteAllText(binFiles, WixHeatBuilder.CreateWixFilelist(sourceFiles)); + File.WriteAllText(binFiles, WixHeatBuilder.CreateWixFilelist(sourceFiles, version: rtcfg.ReleaseInfo.Version.ToString())); var msiArch = target.Arch switch { diff --git a/ReleaseBuilder/WixHeatBuilder.cs b/ReleaseBuilder/WixHeatBuilder.cs index 2a27fe091..b5404ffc3 100644 --- a/ReleaseBuilder/WixHeatBuilder.cs +++ b/ReleaseBuilder/WixHeatBuilder.cs @@ -15,7 +15,7 @@ public static class WixHeatBuilder /// The name of the component group /// A function to generate file IDs. /// The wix file xml contents - public static string CreateWixFilelist(string sourceFolder, string folderPrefix = "$(var.HarvestPath)", string directoryRefName = "INSTALLLOCATION", string componentGroupId = "DUPLICATIBIN", Func? fileIdGenerator = null) + public static string CreateWixFilelist(string sourceFolder, string version, string folderPrefix = "$(var.HarvestPath)", string directoryRefName = "INSTALLLOCATION", string componentGroupId = "DUPLICATIBIN", Func? fileIdGenerator = null) { var itemIds = new Dictionary(); fileIdGenerator ??= (x) => Path.GetRelativePath(sourceFolder, x).Replace("\\", "_").Replace("/", "_").Replace(":", "_").Replace(" ", "_"); @@ -32,9 +32,9 @@ public static class WixHeatBuilder foreach (var f in Directory.EnumerateFileSystemEntries(sourceFolder)) if (File.Exists(f)) - AddFile(doc, directoryRef, f, itemIds, fileIdGenerator, pathTransformer); + AddFile(doc, directoryRef, f, version, itemIds, fileIdGenerator, pathTransformer); else if (Directory.Exists(f)) - AddDirectory(doc, directoryRef, f, itemIds, fileIdGenerator, pathTransformer); + AddDirectory(doc, directoryRef, f, version, itemIds, fileIdGenerator, pathTransformer); var fragment2 = doc.CreateElement("Fragment"); root.AppendChild(fragment2); @@ -59,9 +59,10 @@ public static class WixHeatBuilder /// The XML document. /// The XML element representing the directory reference. /// The file to be added. + /// The version of the file. /// The dictionary containing the item IDs. /// The function to generate file IDs. - private static void AddFile(XmlDocument doc, XmlElement directoryRef, string file, Dictionary itemIds, Func fileIdGenerator, Func pathTransformer) + private static void AddFile(XmlDocument doc, XmlElement directoryRef, string file, string version, Dictionary itemIds, Func fileIdGenerator, Func pathTransformer) { var id = fileIdGenerator.Invoke(file); itemIds.Add(file, id); @@ -74,6 +75,7 @@ public static class WixHeatBuilder var fileElement = doc.CreateElement("File"); fileElement.SetAttribute("Id", id); fileElement.SetAttribute("KeyPath", "yes"); + fileElement.SetAttribute("DefaultVersion", version); fileElement.SetAttribute("Source", pathTransformer(file)); component.AppendChild(fileElement); } @@ -84,9 +86,10 @@ public static class WixHeatBuilder /// The XML document to add the directory to. /// The parent directory reference element. /// The directory path to add. + /// The version of the directory. /// A dictionary to store the mapping between directory paths and their generated IDs. /// A function to generate file IDs. - private static void AddDirectory(XmlDocument doc, XmlElement directoryRef, string dir, Dictionary itemIds, Func fileIdGenerator, Func pathTransformer) + private static void AddDirectory(XmlDocument doc, XmlElement directoryRef, string dir, string version, Dictionary itemIds, Func fileIdGenerator, Func pathTransformer) { var id = fileIdGenerator.Invoke(dir); @@ -97,9 +100,9 @@ public static class WixHeatBuilder directoryRef.AppendChild(directory); foreach (var file in Directory.GetFiles(dir)) - AddFile(doc, directory, file, itemIds, fileIdGenerator, pathTransformer); + AddFile(doc, directory, file, version, itemIds, fileIdGenerator, pathTransformer); foreach (var subDir in Directory.GetDirectories(dir)) - AddDirectory(doc, directory, subDir, itemIds, fileIdGenerator, pathTransformer); + AddDirectory(doc, directory, subDir, version, itemIds, fileIdGenerator, pathTransformer); } } \ No newline at end of file From 09176dc3d1469ff5f17633224156defb91661de4 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Tue, 3 Sep 2024 13:51:18 +0200 Subject: [PATCH 2/3] Change strategy for upgrades with MSI, now always treating as major upgrades as we have no patches for now. --- ReleaseBuilder/Resources/Windows/Duplicati.wxs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ReleaseBuilder/Resources/Windows/Duplicati.wxs b/ReleaseBuilder/Resources/Windows/Duplicati.wxs index 2995fcdd6..32ebaf0a0 100644 --- a/ReleaseBuilder/Resources/Windows/Duplicati.wxs +++ b/ReleaseBuilder/Resources/Windows/Duplicati.wxs @@ -68,14 +68,9 @@ - - - - - - - - + From 03d3f82b8e2980e85cd8167c050fc6bdbc98f896 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Tue, 3 Sep 2024 13:52:04 +0200 Subject: [PATCH 3/3] Re-enabled the `FORSERVICE` conditions after a patch to wixl. --- ReleaseBuilder/Resources/Windows/Duplicati.wxs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ReleaseBuilder/Resources/Windows/Duplicati.wxs b/ReleaseBuilder/Resources/Windows/Duplicati.wxs index 32ebaf0a0..1e6a9623e 100644 --- a/ReleaseBuilder/Resources/Windows/Duplicati.wxs +++ b/ReleaseBuilder/Resources/Windows/Duplicati.wxs @@ -44,19 +44,19 @@ - + FORSERVICE = "true" - + FORSERVICE = "true" - + FORSERVICE = "true"