DeployLX Software Protection System

License Extensions and Subscriptions

Extendable limits - like the Time and Use limits - make it easy to update licenses on a client machine without issuing new licenses. For example, issuing codes that allow users to extend the use of their trial version. Extendable limits are also effective in creating product subscriptions where the user must periodically pay for continued use of the software.

Extension Codes

Extendable limits may be extended with a code that the user enters on their machine. Codes can be generated from the DeployLX Manager or in code.

Once an extension code generated with a given serial number and limit code, it may notbe used again. The extension code will only work if the limit code used to generate the extension matches the limit code displayed on the extension form so if the user attempts to reformat and enter an old extension code it will fail.

To support extensions


  1. Select the Trial/Evaluation tab in the Easy License Editor.
  2. Select the Allow trial extensions option.

Activation Grace Period

  1. Select the Hardware Locking tab in the Easy License Editor.
  2. Select the Allow grace period extensions option.

Time or Use Limit

  1. Select the Use and Time Limits tab in the Easy License Editor.
  2. Select the Allow extensions option.
  1. Select the license containing the extendable limit in the license list of the Advanced License Editor.
  2. Switch to the Limits tab.
  3. Select the extendable limit (such as the Time or Use limit) in the limits tree.
  4. Select the XXX can be extended by the license server and by code or serial number options.

Using the DeployLX Manager to generate extension codes

  1. Open the license file in DeployLX.
  2. Select the license/edition to extend.
  3. Select Generate Code | Generate Extension Code from the Home tab of the Ribbon. The Generate Extension Code Form is displayed.
  4. If the license is unlocked with a serial number, enter the Serial Number of the license being extended.
  5. Enter the Limit Code.
  6. Select the limit to extend from the Extension options.
  7. Select the Code Expires date to limit how long the extension code can be used. The default is 3 days from the current date UTC.
  8. Select Generate to generate the extension code.

Generating From Code Sample

This sample demonstrates how to generate an extension code in code. See the MakeLicenseExtension method for details.

Private key As New LicenseKey("Path to LSK keys file")
key.DeployLxSerialNumbers = New String() { 
    "Your DeployLX Serial Number." }
Private serialNumber As String = key.MakeLicenseExtension(_
    DateTime.MinValue, _
    Nothing, _
    CodeAlgorithm.Advanced )
LicenseKey key = new LicenseKey( "Path to LSK keys file" );
key.DeployLxSerialNumbers = new string[] {
    "Your DeployLX Serial Number." };
string serialNumber = key.MakeLicenseExtension(
    CodeAlgorithm.Advanced );

Supporting Online Extensions

Automate extensions with a license server. To add support you modify the Extend method of the ASMX file to support your license extension rules.

See the License Servers in DeployLX topic for details on creating and deploying a license server.


This code sample demonstrates a basic implementation of the CanExtend and RecordExtension methods.

Protected Overrides Function Extend( _
            ByVal context As ServerRequestContext, _
            ByVal limit As IExtendableLimit) As Boolean
    If Not HasPaidForRenewal(limit.License.SerialNumber) Then
        Throw New Exception("You have not paid for your renewal.")
    End If

    Dim time = TryCast(limit, TimeLimit)
    time.AbsoluteDate = GetExpirationDate(limit.License.SerialNumber)
    Return True
End Function
protected override bool Extend( 
            ServerRequestContext context,
            IExtendableLimit limit )
    if( ! HasPaidForRenewal( limit.License.SerialNumber ) )
        throw new Exception( "You have not paid for your renewal." );
    var time = limit as TimeLimit;
    time.AbsoluteDate = GetExpirationDate( limit.License.SerialNumber );
    NotifyModification( time );
    return true;

See Also