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.
Important
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.
- 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
dotnet add package LicenseManagement.EndUserOr via NuGet Package Manager:
Install-Package LicenseManagement.EndUser
Warning
Breaking Change in v2.0.0: The package has been renamed from Hymma.Lm.EndUser to LicenseManagement.EndUser. See the Migration Guide below.
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
};// During MSI/Setup installation
var context = new LicHandlingContext(preferences);
var installHandler = new LicenseHandlingInstall(
context,
onSuccess: (ctx) => {
Console.WriteLine("License installed successfully!");
}
);
await installHandler.HandleLicenseAsync();// 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();// 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();| 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 |
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 */ };Attach custom metadata to licenses during installation:
preferences.BeforeLicensePost += (sender, args) => {
args.Metadata["CustomerName"] = "John Doe";
args.Metadata["OrderId"] = "ORD-12345";
};- Computer ID: Windows Registry (
HKLM\Software\Hymma\LicenseManagement) - License File:
%LocalAppData%\License-Management.com\{VendorId}\{ProductName}.lic
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}");
}- .NET Framework 4.8.1
- Windows OS (uses WMI for hardware identification)
- Internet connection for initial activation (offline afterward)
- 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
We provide sample applications demonstrating real-world usage patterns:
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.
Version 2.0.0 introduces a breaking change: the namespace has been renamed from Hymma.Lm.EndUser to LicenseManagement.EndUser.
-
Update NuGet Package Reference
# Remove old package dotnet remove package Hymma.Lm.EndUser # Add new package dotnet add package LicenseManagement.EndUser
-
Update Namespace Imports Replace all occurrences:
// Old using Hymma.Lm.EndUser; // New using LicenseManagement.EndUser;
-
Update Assembly References (if using direct DLL reference)
- Old:
Hymma.Lm.EndUser.dll - New:
LicenseManagement.EndUser.dll
- Old:
| v1.x | v2.0.0 |
|---|---|
Hymma.Lm.EndUser namespace |
LicenseManagement.EndUser namespace |
Hymma.Lm.EndUser.dll |
LicenseManagement.EndUser.dll |
NuGet: Hymma.Lm.EndUser |
NuGet: LicenseManagement.EndUser |
All classes, methods, and APIs remain unchanged - only the namespace has been updated for consistency.
See CHANGELOG.md for version history and release notes.
MIT - See LICENSE for details.
- LicenseManagement.Client - Server-side SDK for vendors
- LicenseManagement.EndUser.Wpf - WPF UI components