Hymma.Lm.EndUser
1.3.0
Prefix Reserved
use LicenseManagement.EndUser.Wpf instead
Requires NuGet 2.5 or higher.
dotnet add package Hymma.Lm.EndUser --version 1.3.0
NuGet\Install-Package Hymma.Lm.EndUser -Version 1.3.0
<PackageReference Include="Hymma.Lm.EndUser" Version="1.3.0" />
<PackageVersion Include="Hymma.Lm.EndUser" Version="1.3.0" />
<PackageReference Include="Hymma.Lm.EndUser" />
paket add Hymma.Lm.EndUser --version 1.3.0
#r "nuget: Hymma.Lm.EndUser, 1.3.0"
#:package Hymma.Lm.EndUser@1.3.0
#addin nuget:?package=Hymma.Lm.EndUser&version=1.3.0
#tool nuget:?package=Hymma.Lm.EndUser&version=1.3.0
LicenseManagement.EndUser
End-user SDK for license-management.com - A license management platform for software vendors.
This library is designed for client-side applications (desktop apps, plugins, add-ins) to validate licenses, handle trials, and manage activations.
Account Required: This library requires a publisher account at license-management.com.
Free with Dev Subscription: A developer subscription is available at no cost, which provides full access to all features for development and testing purposes.
Features
- License Validation - Validate licenses at application launch
- Trial Management - Automatic trial period handling with anti-tampering
- Installation Handling - Register computers during application install
- Uninstall Support - Properly unregister computers to free seats
- Offline Support - License validation works offline after initial activation
- Digital Signatures - RSA signature verification for license files
- Time Sync Detection - Detects system clock tampering
- Hardware Identification - Secure device fingerprinting
Installation
dotnet add package Hymma.Lm.EndUser
Or via NuGet Package Manager:
Install-Package Hymma.Lm.EndUser
Quick Start
1. Configure Publisher Preferences
using LicenseManagement.EndUser;
var preferences = new PublisherPreferences
{
VendorId = "VDR_01ABC...", // Your vendor ID
ProductId = "PRD_01XYZ...", // Your product ID
ApiKey = "your-client-api-key", // Client API key (NOT master key)
PublicKey = "<RSAKeyValue>...</RSAKeyValue>", // For signature verification
TrialDays = 14, // Trial period duration
ValidDays = 90 // License cache validity
};
2. Handle License at Installation
// During MSI/Setup installation
var context = new LicHandlingContext(preferences);
var installHandler = new LicenseHandlingInstall(
context,
onSuccess: (ctx) => {
Console.WriteLine("License installed successfully!");
}
);
await installHandler.HandleLicenseAsync();
3. Validate License at Launch
// At application startup
var context = new LicHandlingContext(preferences);
var launchHandler = new LicenseHandlingLaunch(
context,
onLicenseHandledSuccessfully: (license) => {
Console.WriteLine($"License valid until: {license.Expires}");
},
onCustomerMustEnterProductKey: () => {
// Show product key entry dialog
return GetProductKeyFromUser();
},
onTrialValidated: () => {
Console.WriteLine("Trial period active");
return null;
},
onTrialEnded: (prefs) => {
// Show trial expired message
MessageBox.Show("Your trial has expired. Please purchase a license.");
},
onLicFileNotFound: (ctx) => {
// License file missing - may need reinstall
}
);
await launchHandler.HandleLicenseAsync();
4. Handle Uninstallation
// During uninstall to free up the license seat
var context = new LicHandlingContext(preferences);
var uninstallHandler = new LicenseHandlingUninstall(
context,
onSuccess: (ctx) => {
Console.WriteLine("Computer unregistered successfully");
}
);
await uninstallHandler.HandleLicenseAsync();
License States
| State | Description |
|---|---|
Valid |
Active paid subscription |
ValidTrial |
Within trial period |
InValidTrial |
Trial period expired |
Expired |
License has expired |
ReceiptExpired |
Subscription ended |
ReceiptUnregistered |
Computer unregistered from receipt |
Events
The LicHandlingContext provides events for handling license state changes:
context.OnCustomerMustEnterProductKey += () => { /* Show key entry UI */ };
context.OnTrialValidated += () => { /* Trial is active */ };
context.OnLicenseFileNotFound += () => { /* Handle missing license */ };
context.OnTrialEnded += () => { /* Trial expired */ };
context.OnLicenseHandledSuccessfully += () => { /* Success */ };
Custom Metadata
Attach custom metadata to licenses during installation:
preferences.BeforeLicensePost += (sender, args) => {
args.Metadata["CustomerName"] = "John Doe";
args.Metadata["OrderId"] = "ORD-12345";
};
Storage Locations
- Computer ID: Windows Registry (
HKLM\Software\Hymma\LicenseManagement) - License File:
%LocalAppData%\License-Management.com\{VendorId}\{ProductName}.lic
Exception Handling
try
{
await launchHandler.HandleLicenseAsync();
}
catch (ComputerOfflineException)
{
// No internet - but offline validation may still work
}
catch (CouldNotReadLicenseFromDiskException)
{
// License file corrupted or missing
}
catch (LicenseExpiredException)
{
// License has expired
}
catch (ReceiptExpiredException)
{
// Subscription ended
}
catch (ApiException ex)
{
// API communication error
Console.WriteLine($"API Error: {ex.StatusCode}");
}
Requirements
- .NET Framework 4.8.1
- Windows OS (uses WMI for hardware identification)
- Internet connection for initial activation (offline afterward)
Security Features
- RSA Signature Verification - Licenses are digitally signed
- Hardware Fingerprinting - CPU + Motherboard serial numbers
- Time Tampering Detection - NTP sync validation
- Secure Registry Storage - Computer ID in HKLM
Sample Applications
We provide sample applications demonstrating real-world usage patterns:
WiX Installer Custom Action
The WiX Custom Action Sample demonstrates how to integrate license management into a WiX installer:
- Register computers during installation
- Unregister computers during uninstallation
- Pass configuration via CustomActionData
// Example custom action
[CustomAction]
public static ActionResult InstallLicense(Session session)
{
var preferences = GetPreferences(session, "ProductId");
var context = new LicHandlingContext(preferences);
var handler = new LicenseHandlingInstall(context, null);
handler.HandleLicense();
return ActionResult.Success;
}
See the sample README for complete setup instructions.
Changelog
See CHANGELOG.md for version history and release notes.
License
MIT - See LICENSE for details.
Related Packages
- LicenseManagement.Client - Server-side SDK for vendors
- LicenseManagement.EndUser.Wpf - WPF UI components
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET Framework | net481 is compatible. |
-
.NETFramework 4.8.1
- Hymma.HttpClientFactory (>= 1.0.8)
- Newtonsoft.Json (>= 13.0.3)
- System.Memory (>= 4.5.0)
- System.Threading.Tasks.Extensions (>= 4.5.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Updated to use Hymma.HttpClientFactory 1.0.8 with renamed assembly with Metadata property. Changed to List<MetadataEntry> for XML serialization compatibility. License files now saved with .lic extension with backwards compatibility.