From 24bc2defd06bf6c873bd79dea32b54165dd741ff Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Thu, 7 Nov 2024 23:05:55 +0100 Subject: [PATCH] Added support for the Agent MSI --- .gitignore | 3 +- .../Duplicati.Agent/Duplicati.Agent.csproj | 1 + ReleaseBuilder/.vscode/launch.json | 2 + ReleaseBuilder/Build/Command.CreatePackage.cs | 13 ++- ReleaseBuilder/Build/Command.cs | 20 ++++- ReleaseBuilder/Program.cs | 4 +- .../Resources/Windows/Agent/Duplicati.wxs | 81 ++++++++++++++++++ .../Resources/Windows/{ => Agent}/License.rtf | 0 .../{ => Agent}/Resources/InstallerLarge.bmp | Bin .../{ => Agent}/Resources/InstallerSmall.bmp | Bin .../Resources/Windows/Agent/Shortcuts.wxs | 29 +++++++ .../Resources/Windows/Agent/UpgradeData.wxi | 17 ++++ .../Windows/{ => TrayIcon}/Duplicati.wxs | 0 .../Resources/Windows/TrayIcon/License.rtf | 21 +++++ .../TrayIcon/Resources/InstallerLarge.bmp | Bin 0 -> 615320 bytes .../TrayIcon/Resources/InstallerSmall.bmp | Bin 0 -> 114432 bytes .../Windows/{ => TrayIcon}/Shortcuts.wxs | 0 .../Windows/{ => TrayIcon}/UpgradeData.wxi | 2 +- .../WixUIExtension/ui/InstallDirDlg.wxs | 34 ++++++++ .../WixUIExtension/ui/InvalidDirDlg.wxs | 15 ++++ .../Windows/WixUIExtension/ui/README.md | 13 +-- 21 files changed, 239 insertions(+), 16 deletions(-) create mode 100644 ReleaseBuilder/Resources/Windows/Agent/Duplicati.wxs rename ReleaseBuilder/Resources/Windows/{ => Agent}/License.rtf (100%) rename ReleaseBuilder/Resources/Windows/{ => Agent}/Resources/InstallerLarge.bmp (100%) rename ReleaseBuilder/Resources/Windows/{ => Agent}/Resources/InstallerSmall.bmp (100%) create mode 100644 ReleaseBuilder/Resources/Windows/Agent/Shortcuts.wxs create mode 100644 ReleaseBuilder/Resources/Windows/Agent/UpgradeData.wxi rename ReleaseBuilder/Resources/Windows/{ => TrayIcon}/Duplicati.wxs (100%) create mode 100644 ReleaseBuilder/Resources/Windows/TrayIcon/License.rtf create mode 100644 ReleaseBuilder/Resources/Windows/TrayIcon/Resources/InstallerLarge.bmp create mode 100644 ReleaseBuilder/Resources/Windows/TrayIcon/Resources/InstallerSmall.bmp rename ReleaseBuilder/Resources/Windows/{ => TrayIcon}/Shortcuts.wxs (100%) rename ReleaseBuilder/Resources/Windows/{ => TrayIcon}/UpgradeData.wxi (87%) create mode 100644 ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InstallDirDlg.wxs create mode 100644 ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InvalidDirDlg.wxs diff --git a/.gitignore b/.gitignore index 377e8b38d..769557ef3 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ changelog-news.txt .vs/ /publish/ ReleaseBuilder/build-temp/ -ReleaseBuilder/Resources/Windows/binfiles.wxs +ReleaseBuilder/Resources/Windows/TrayIcon/binfiles.wxs +ReleaseBuilder/Resources/Windows/Agent/binfiles.wxs diff --git a/Executables/net8/Duplicati.Agent/Duplicati.Agent.csproj b/Executables/net8/Duplicati.Agent/Duplicati.Agent.csproj index e07476bba..a114f1cb4 100644 --- a/Executables/net8/Duplicati.Agent/Duplicati.Agent.csproj +++ b/Executables/net8/Duplicati.Agent/Duplicati.Agent.csproj @@ -5,6 +5,7 @@ net8.0 The Duplicati Agent implementation Copyright © 2024 Team Duplicati, MIT license + ..\..\..\Duplicati\GUI\Duplicati.GUI.TrayIcon\Duplicati.ico diff --git a/ReleaseBuilder/.vscode/launch.json b/ReleaseBuilder/.vscode/launch.json index 1aa621df8..8c9c81e05 100644 --- a/ReleaseBuilder/.vscode/launch.json +++ b/ReleaseBuilder/.vscode/launch.json @@ -27,6 +27,8 @@ "--targets", "win-x86-gui.msi", "--targets", "win-x64-gui.msi", "--targets", "win-x64-gui.zip", + "--targets", "win-x64-agent.msi", + "--targets", "win-arm64-agent.msi", "--targets", "linux-x64-gui.zip", "--targets", "linux-arm64-gui.zip", "--targets", "osx-x64-gui.dmg", diff --git a/ReleaseBuilder/Build/Command.CreatePackage.cs b/ReleaseBuilder/Build/Command.CreatePackage.cs index 8f1a274a2..25abfd5d9 100644 --- a/ReleaseBuilder/Build/Command.CreatePackage.cs +++ b/ReleaseBuilder/Build/Command.CreatePackage.cs @@ -242,6 +242,13 @@ public static partial class Command static async Task BuildMsiPackage(string baseDir, string buildRoot, string msiFile, PackageTarget target, RuntimeConfig rtcfg) { var resourcesDir = Path.Combine(baseDir, "ReleaseBuilder", "Resources", "Windows"); + var resourcesSubDir = Path.Combine(resourcesDir, + target.Interface switch + { + InterfaceType.GUI => "TrayIcon", + InterfaceType.Agent => "Agent", + _ => throw new Exception($"Unsupported interface type: {target.Interface}") + }); var buildTmp = Path.Combine(buildRoot, "tmp-msi"); if (Directory.Exists(buildTmp)) @@ -254,7 +261,7 @@ public static partial class Command if (!sourceFiles.EndsWith(Path.DirectorySeparatorChar)) sourceFiles += Path.DirectorySeparatorChar; - var binFiles = Path.Combine(resourcesDir, "binfiles.wxs"); + var binFiles = Path.Combine(resourcesSubDir, "binfiles.wxs"); if (File.Exists(binFiles)) File.Delete(binFiles); @@ -275,9 +282,9 @@ public static partial class Command "--define", $"HarvestPath={sourceFiles}", "--arch", msiArch, "--output", msiFile, - Path.Combine(resourcesDir, "Shortcuts.wxs"), + Path.Combine(resourcesSubDir, "Shortcuts.wxs"), binFiles, - Path.Combine(resourcesDir, "Duplicati.wxs") + Path.Combine(resourcesSubDir, "Duplicati.wxs") ], workingDirectory: buildRoot); if (rtcfg.UseAuthenticodeSigning) diff --git a/ReleaseBuilder/Build/Command.cs b/ReleaseBuilder/Build/Command.cs index f3609b198..c067539a6 100644 --- a/ReleaseBuilder/Build/Command.cs +++ b/ReleaseBuilder/Build/Command.cs @@ -676,17 +676,29 @@ public static partial class Command regex.Replace(File.ReadAllText(file), $"?v={releaseInfo.Version}") ); - var wixFile = Path.Combine(baseDir, "ReleaseBuilder", "Resources", "Windows", "UpgradeData.wxi"); + var wixFileGUI = Path.Combine(baseDir, "ReleaseBuilder", "Resources", "Windows", "TrayIcon", "UpgradeData.wxi"); File.WriteAllText( - wixFile, + wixFileGUI, Regex.Replace( - File.ReadAllText(wixFile), + File.ReadAllText(wixFileGUI), @"\<\?define ProductVersion\=\""" + versionre + @"\"" \?\>", $"" ) ); - targetfiles.Add(wixFile); + targetfiles.Add(wixFileGUI); + + var wixFileAgent = Path.Combine(baseDir, "ReleaseBuilder", "Resources", "Windows", "Agent", "UpgradeData.wxi"); + File.WriteAllText( + wixFileAgent, + Regex.Replace( + File.ReadAllText(wixFileAgent), + @"\<\?define ProductVersion\=\""" + versionre + @"\"" \?\>", + $"" + ) + ); + + targetfiles.Add(wixFileAgent); return targetfiles; } diff --git a/ReleaseBuilder/Program.cs b/ReleaseBuilder/Program.cs index 7925bfbc3..4b54f5124 100644 --- a/ReleaseBuilder/Program.cs +++ b/ReleaseBuilder/Program.cs @@ -18,8 +18,8 @@ class Program "win-x86-gui.msi", "win-arm64-gui.zip", "win-arm64-gui.msi", - // "win-x64-agent.msi", // Need to add support for building without trayicon + window service support - // "win-arm64-agent.msi", // Need to add support for building without trayicon + window service support + "win-x64-agent.msi", // Missing window service support + "win-arm64-agent.msi", // Missing window service support "win-x64-agent.zip", "win-arm64-agent.zip", diff --git a/ReleaseBuilder/Resources/Windows/Agent/Duplicati.wxs b/ReleaseBuilder/Resources/Windows/Agent/Duplicati.wxs new file mode 100644 index 000000000..649dda182 --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/Agent/Duplicati.wxs @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FORSERVICE = "true" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ReleaseBuilder/Resources/Windows/License.rtf b/ReleaseBuilder/Resources/Windows/Agent/License.rtf similarity index 100% rename from ReleaseBuilder/Resources/Windows/License.rtf rename to ReleaseBuilder/Resources/Windows/Agent/License.rtf diff --git a/ReleaseBuilder/Resources/Windows/Resources/InstallerLarge.bmp b/ReleaseBuilder/Resources/Windows/Agent/Resources/InstallerLarge.bmp similarity index 100% rename from ReleaseBuilder/Resources/Windows/Resources/InstallerLarge.bmp rename to ReleaseBuilder/Resources/Windows/Agent/Resources/InstallerLarge.bmp diff --git a/ReleaseBuilder/Resources/Windows/Resources/InstallerSmall.bmp b/ReleaseBuilder/Resources/Windows/Agent/Resources/InstallerSmall.bmp similarity index 100% rename from ReleaseBuilder/Resources/Windows/Resources/InstallerSmall.bmp rename to ReleaseBuilder/Resources/Windows/Agent/Resources/InstallerSmall.bmp diff --git a/ReleaseBuilder/Resources/Windows/Agent/Shortcuts.wxs b/ReleaseBuilder/Resources/Windows/Agent/Shortcuts.wxs new file mode 100644 index 000000000..8204cb98a --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/Agent/Shortcuts.wxs @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ReleaseBuilder/Resources/Windows/Agent/UpgradeData.wxi b/ReleaseBuilder/Resources/Windows/Agent/UpgradeData.wxi new file mode 100644 index 000000000..5cf2fc65a --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/Agent/UpgradeData.wxi @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ReleaseBuilder/Resources/Windows/Duplicati.wxs b/ReleaseBuilder/Resources/Windows/TrayIcon/Duplicati.wxs similarity index 100% rename from ReleaseBuilder/Resources/Windows/Duplicati.wxs rename to ReleaseBuilder/Resources/Windows/TrayIcon/Duplicati.wxs diff --git a/ReleaseBuilder/Resources/Windows/TrayIcon/License.rtf b/ReleaseBuilder/Resources/Windows/TrayIcon/License.rtf new file mode 100644 index 000000000..9b2b7cff7 --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/TrayIcon/License.rtf @@ -0,0 +1,21 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2761 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\froman\fcharset0 TimesNewRomanPSMT;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\paperw12240\paperh15840\margl1440\margr1440\margb1417\margt1417\vieww13140\viewh16360\viewkind1 +\deftab720 +\pard\pardeftab720\ri0\sl380\sa240\partightenfactor0 + +\f0\fs25 \cf0 Copyright (c) 2024 Team Duplicati, https://duplicati.com, hello@duplicati.com +\f1\fs24 \ +\pard\pardeftab720\ri0\sl380\sb240\sa240\partightenfactor0 + +\f0\fs25 \cf0 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +\f1\fs24 \ + +\f0\fs25 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +\f1\fs24 \ + +\f0\fs25 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\f1\fs24 \ +} \ No newline at end of file diff --git a/ReleaseBuilder/Resources/Windows/TrayIcon/Resources/InstallerLarge.bmp b/ReleaseBuilder/Resources/Windows/TrayIcon/Resources/InstallerLarge.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e4833d4e0fd53875e9287fde6626838e1e2be929 GIT binary patch literal 615320 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 - + diff --git a/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InstallDirDlg.wxs b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InstallDirDlg.wxs new file mode 100644 index 000000000..2bc1bc9a9 --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InstallDirDlg.wxs @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InvalidDirDlg.wxs b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InvalidDirDlg.wxs new file mode 100644 index 000000000..81c87beb9 --- /dev/null +++ b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/InvalidDirDlg.wxs @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/README.md b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/README.md index f1ffed102..f077fd7bb 100644 --- a/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/README.md +++ b/ReleaseBuilder/Resources/Windows/WixUIExtension/ui/README.md @@ -11,10 +11,13 @@ Also, the dialogs were modified to place the buttons as the first items in the d The extra files are: -- [`BrowseDlg.wxs`](./ui/BrowseDlg.wxs) -- [`CustomizeDlg.wxs`](./ui/CustomizeDlg.wxs) -- [`DiskCostDlg.wxs`](./ui/DiskCostDlg.wxs) -- [`LicenseAgreementDlg.wxs`](./ui/LicenseAgreementDlg.wxs) -- [`WixUI_FeatureTree.wxs`](./ui/WixUI_FeatureTree.wxs) +- [`BrowseDlg.wxs`](./BrowseDlg.wxs) +- [`CustomizeDlg.wxs`](./CustomizeDlg.wxs) +- [`DiskCostDlg.wxs`](./DiskCostDlg.wxs) +- [`LicenseAgreementDlg.wxs`](./LicenseAgreementDlg.wxs) +- [`WixUI_FeatureTree.wxs`](./WixUI_FeatureTree.wxs) +- [`WixUI_InstallDir.wxs`](./WixUI_InstallDir.wxs) +- [`InstallDirDlg.wxs`](./InstallDirDlg.wxs) +- [`InvalidDirDlg.wxs`](./InvalidDirDlg.wxs) The files are all licensed under the [MS-RL](https://opensource.org/licenses/ms-rl) license.