From 4bd9cd400fa046af17e8468d576ff6c094ea4d8f Mon Sep 17 00:00:00 2001
From: "dependencyupdates[bot]"
<218638057+dependencyupdates[bot]@users.noreply.github.com>
Date: Tue, 14 Jul 2026 17:59:35 +0000
Subject: [PATCH 1/2] Update dependency Particular.Licensing.Sources to v7
---
src/Directory.Packages.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index 65989624cd..c353458ebe 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -61,7 +61,7 @@
-
+
From 5a2b52fa9a3f412a853a545ae1035d0b33f22f34 Mon Sep 17 00:00:00 2001
From: Brandon Ording
Date: Tue, 14 Jul 2026 17:27:51 -0400
Subject: [PATCH 2/2] Adjust code for upgrade protection changes
---
.../UI/License/LicenseComponentFactory.cs | 26 -------------------
.../DetectedLicense.cs | 2 ++
.../LicenseDetails.cs | 23 +++++++++-------
.../LicenseManager.cs | 4 +--
.../Validation/AbstractCommandChecks.cs | 7 +++--
5 files changed, 20 insertions(+), 42 deletions(-)
diff --git a/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs b/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs
index 345a524e7e..75d18b5272 100644
--- a/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs
+++ b/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs
@@ -6,7 +6,6 @@
static class LicenseComponentFactory
{
- const string UpgradeProtectionLicenseText = "Please extend your upgrade protection so that we can continue to provide you with support and new versions of the Particular Service Platform.";
const string SubscriptionLicenseText = "Please extend your license to continue using the Particular Service Platform.";
static readonly CountInflector DaysInflector = new()
@@ -74,31 +73,6 @@ static LicenseComponent SubscriptionExpiryComponent(LicenseDetails details)
static LicenseComponent UpgradeProtectionExpiryComponent(LicenseDetails details)
{
- if (details.WarnUserUpgradeProtectionHasExpired)
- {
- return new LicenseComponent
- {
- Label = "Upgrade protection expiry date:",
- Value = $"{details.UpgradeProtectionExpiration:d} - expired",
- Importance = Importance.Warning,
- ShortText = "Platform license expired",
- WarningText = UpgradeProtectionLicenseText
- };
- }
-
- if (details.WarnUserUpgradeProtectionIsExpiring)
- {
- var daysRemain = DaysInflector.Inflect(details.DaysUntilUpgradeProtectionExpires ?? 0);
- return new LicenseComponent
- {
- Label = "Upgrade protection expiry date:",
- Value = $"{details.UpgradeProtectionExpiration:d} - {daysRemain} left",
- Importance = Importance.Warning,
- ShortText = $"Warning: Upgrade protection expiring in {daysRemain}",
- WarningText = UpgradeProtectionLicenseText
- };
- }
-
return new LicenseComponent
{
Label = "Upgrade protection expiry date:",
diff --git a/src/ServiceControl.LicenseManagement/DetectedLicense.cs b/src/ServiceControl.LicenseManagement/DetectedLicense.cs
index 27567994a3..507df8fd30 100644
--- a/src/ServiceControl.LicenseManagement/DetectedLicense.cs
+++ b/src/ServiceControl.LicenseManagement/DetectedLicense.cs
@@ -9,7 +9,9 @@ public DetectedLicense(string licensePath, LicenseDetails details)
}
public string Location { get; }
+
public LicenseDetails Details { get; }
+
public bool IsEvaluationLicense { get; init; }
}
}
\ No newline at end of file
diff --git a/src/ServiceControl.LicenseManagement/LicenseDetails.cs b/src/ServiceControl.LicenseManagement/LicenseDetails.cs
index eab2cf5015..970b65e1cb 100644
--- a/src/ServiceControl.LicenseManagement/LicenseDetails.cs
+++ b/src/ServiceControl.LicenseManagement/LicenseDetails.cs
@@ -8,24 +8,35 @@
public class LicenseDetails
{
public DateTime? ExpirationDate { get; private init; }
+
public DateTime? UpgradeProtectionExpiration { get; private init; }
public bool IsTrialLicense { get; private init; }
+
public bool IsCommercialLicense { get; private init; }
+
public bool IsExtendedTrial { get; private init; }
+
public string LicenseType { get; private init; }
+
public string Edition { get; private init; }
+
public string RegisteredTo { get; private init; }
+
public bool ValidForServiceControl { get; private init; }
+
public int? DaysUntilSubscriptionExpires { get; private init; }
- public int? DaysUntilUpgradeProtectionExpires { get; private init; }
+
public bool WarnUserTrialIsExpiring { get; private init; }
+
public bool WarnUserTrialHasExpired { get; private init; }
+
public bool WarnUserSubscriptionIsExpiring { get; private init; }
+
public bool WarnUserSubscriptionHasExpired { get; private init; }
- public bool WarnUserUpgradeProtectionIsExpiring { get; private init; }
- public bool WarnUserUpgradeProtectionHasExpired { get; private init; }
+
public string Status { get; private init; }
+
public LicensedProduct[] Products { get; private init; }
public static LicenseDetails TrialFromEndDate(DateOnly endDate)
@@ -71,11 +82,8 @@ internal static LicenseDetails FromLicense(License license)
Products = license.LicensedEndpoints?.Select(le => new LicensedProduct(le.Size.EndsWith("U") ? "Unlimited" : Regex.Replace(le.Size, @"^\D*", ""), le.Quantity)).ToArray(),
ValidForServiceControl = license.ValidForApplication("ServiceControl"),
DaysUntilSubscriptionExpires = license.GetDaysUntilLicenseExpires(),
- DaysUntilUpgradeProtectionExpires = license.GetDaysUntilUpgradeProtectionExpires(),
- WarnUserUpgradeProtectionHasExpired = licenseStatus is LicenseStatus.ValidWithExpiredUpgradeProtection or LicenseStatus.InvalidDueToExpiredUpgradeProtection,
WarnUserTrialIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringTrial,
WarnUserSubscriptionIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringSubscription,
- WarnUserUpgradeProtectionIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringUpgradeProtection,
WarnUserTrialHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredTrial,
WarnUserSubscriptionHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredSubscription,
Status = licenseStatus.ToString()
@@ -85,9 +93,6 @@ internal static LicenseDetails FromLicense(License license)
public bool HasLicenseExpired() => ExpirationDate.HasValue && HasLicenseDateExpired(ExpirationDate.Value);
- public bool ReleaseNotCoveredByMaintenance(DateTime buildTimeStamp) =>
- buildTimeStamp > UpgradeProtectionExpiration;
-
static bool HasLicenseDateExpired(DateTime licenseDate)
{
var oneDayGrace = licenseDate;
diff --git a/src/ServiceControl.LicenseManagement/LicenseManager.cs b/src/ServiceControl.LicenseManagement/LicenseManager.cs
index 4b00afded9..558ae70e16 100644
--- a/src/ServiceControl.LicenseManagement/LicenseManager.cs
+++ b/src/ServiceControl.LicenseManagement/LicenseManager.cs
@@ -8,7 +8,7 @@ public class LicenseManager
public static DetectedLicense FindLicense()
{
var sources = LicenseSource.GetStandardLicenseSources();
- var result = ActiveLicense.Find("ServiceControl", sources.ToArray());
+ var result = ActiveLicense.Find("ServiceControl", [.. sources]);
var detectedLicense = new DetectedLicense(result.Location, LicenseDetails.FromLicense(result.License))
{
@@ -50,7 +50,5 @@ public static bool TryImportLicense(string licenseFile, out string errorMessage)
errorMessage = null;
return true;
}
-
- public static DateTime GetReleaseDate() => ReleaseDateReader.GetReleaseDate();
}
}
diff --git a/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs b/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs
index 2c4804b62c..9f4e2771b4 100644
--- a/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs
+++ b/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs
@@ -222,11 +222,9 @@ CheckLicenseResult CheckLicenseIsValid()
return new CheckLicenseResult(false, "This license edition does not include ServiceControl");
}
- var releaseDate = LicenseManager.GetReleaseDate();
-
- if (license.Details.ReleaseNotCoveredByMaintenance(releaseDate))
+ if (license.Details.Status.Contains("InvalidDueToUpgradeProtectionNoLongerBeingSupported", StringComparison.OrdinalIgnoreCase))
{
- return new CheckLicenseResult(false, "License does not cover this release of ServiceControl Monitoring. Upgrade protection expired.");
+ return new CheckLicenseResult(false, "Licenses with upgrade protection are no longer supported.");
}
return new CheckLicenseResult(true);
@@ -241,6 +239,7 @@ public CheckLicenseResult(bool valid, string message = null)
}
public bool Valid { get; private set; }
+
public string Message { get; private set; }
}
}