Quick License Manager
HomeWebsite
  • Quick License Manager
  • 🔊Announcements
    • What's new in QLM v19 and upgrade procedure
    • TLS 1.2 Requirements
    • What's new in QLM v18 and upgrade procedure
    • What's new in QLM v17 and upgrade procedure
    • What's new in QLM v16 and Upgrade Procedure
    • What's new in QLM v15 and Upgrade Procedure
    • What's new in QLM v14 and Upgrade Procedure
    • What's new in QLM v12 and Upgrade Procedure
    • What's new in QLM v11 and Upgrade Procedure
    • What's new in QLM v10 and Upgrade Procedure
    • What's new in QLM v9 and Upgrade Procedure
    • What's new in QLM v8 and Upgrade Procedure
    • What's new in QLM v7?
    • What's new in QLM v7 and Upgrade Procedure
  • 🉑Fundamental Concepts
    • License Key Fields Definitions
    • License Key Types
    • Length of QLM license keys
    • OrderStatus field
    • License Model
    • License Model v17+
    • Computer Identifier (ComputerID) requirements
    • License Binding
    • Variable License Binding
    • Product Features
    • Product Properties
      • Data Types
      • Enforce Product Properties
    • CommunicationEncryptionKey and AdminEncryptionKey
    • Search macros
    • Differences between QLM Express and QLM Pro
    • Differences between QLM Pro and Enterprise
    • Server-side license validation
    • Online activation
      • Online Activation with basic authentication (user/password)
      • Online Activation By Authorization Code
    • Offline activation
      • Offine Activation of License Keys
      • Offline activation of License Files
      • Deactivation Verification Code for Offline Deactivation
    • QLM Timer
    • Maintenance Plan
    • How to implement software subscription
    • Subscription workflow when integrated with an eCommerce Provider
    • Check for Updates
    • License Activation Count
    • Organizations
    • History log
    • WebHooks
    • Analytics
    • User Groups
    • Product Bundles
    • Customer User Account
    • Server Error Codes (EServerErrorCode)
    • .NET 6/7/8, .NET Core and .NET Standard Support
  • ↗️Management Console
    • User Interface
      • Get Started
      • Define Products
        • Check For Updates
      • Protect your application
      • Manage License Keys
        • Create License Keys
          • Settings Templates
        • Activate License Keys
        • Export License Keys
        • Fraud Detection
          • Illegal Computers
        • Mail
        • License Server
        • Tools
        • QLM Portal
        • Scheduled Tasks
        • Server Event Log
        • Global Search
      • Manage Customers
      • Backup
      • Generate Keys
      • Validate Keys
      • About
    • How to use QLM Management Console Grid View
    • How to install the QLM Management Console on a second computer
    • Archiving license keys
    • How to create keys in bulk
    • How to export license keys
    • How to export license keys with the Activation Log section expanded
    • How to migrate my products and settings to another machine?
    • How to share products on 2 machines running QLM?
    • How to publish your products to the License Server
    • How to configure defaults when creating an Activation Key
    • Where is the QLM help?
    • How to create a customer report showing their licenses and activations
    • QLM Management Console - Client Side Event Logging
  • 🧙‍♂️License Wizard
    • Online Activation using the QLM License Wizard Standalone Application
    • How to display your EULA in the QLM License Wizard
    • Configure Check for Updates in the QLM License Wizard
    • Creating Trial Keys from the QLM License Wizard
    • QLM License Wizard - Activation by Email using 3rd party authentication
    • QLM License Wizard Try Button
    • QLM License Wizard - Download Latest Version from a Cloud Drive
    • QLM License Wizard localization
    • How to restore the factory settings of the QLM License Wizard
    • How to initialize the QLM License Wizard programmatically
    • QLM License Wizard Performance
    • How to use the QLM License Wizard with QLM Express
  • 🗜️QLM Agent
    • QLM Agent Service
    • How to manually register the QLM Agent Windows Service
  • 📧Email Framework
    • Configuration
      • How to use SMTP to send emails
      • How to configure QLM to send mail using SMTP
      • Sending emails using the Microsoft Graph API
      • Sending emails using the Gmail API
        • How to create a Gmail OAuth Client ID
        • How to create a Gmail Service account
    • Email Templates
      • How to create email templates with your own editor and upload them to the server
      • External Email Templates
      • Which variables are available in an email template?
    • Email Notifications
      • How to automatically email customers their license key using Scheduled Tasks
      • How to automatically email customers when the subscription is about to expire using Scheduled Tasks
      • How to follow up on idle trials with QLM Enterprise
      • How to send yourself a weekly report of orders
      • How to automatically send an email when a new license is created
      • How to send yourself a weekly report of upcoming renewals
      • How to send email notifications when an illegal computer is detected
      • Send aggregated email notifications per subscription, order or email
      • How to send a notification when a customer is created
      • How to create email drip campaigns in QLM
      • How to receive an email report of failed trial requests using Scheduled Tasks
      • How to automatically send the vendor an email when a customer activates a license
      • How to send email notifications when an activation attempt is detected
      • How to email a monthly analytics report
    • How to email customers their license key interactively from the QLM Management Console
    • Third-Party Email Verifiers
      • Debounce.io
      • Zero Bounce
      • Verify Mail
    • How to exclude customers from email notifications
  • ☁️Floating Licenses
    • Cloud Floating Licenses
      • Implement cloud-based floating licenses with QLM Pro
      • How to implement Cloud Floating Licenses (CFL) in QLM v17+
      • How to implement Cloud Floating Licenses (v16 or earlier)
      • Cloud-based floating licenses and multiple application instances
      • Cloud-based floating licenses - Check-out for offline usage
      • How to implement cloud-based floating licenses for cross-platform applications
    • On-premise Floating Licenses
      • Implement Floating Licenses
      • How to implement floating licensing with QLM Enterprise
      • How to support floating and node locked licences in the same app
      • How to simultaneously support node-locked and cloud-based floating licenses
      • QLM Floating License Viewer
  • ☁️License Server
    • What are the requirements for hosting the QLM License Server?
    • How to install the QLM License Server
    • QLM v12+ Azure Integration
    • QLM and Windows Azure Integration (v10)
    • How to install the QLM License Server on Microsoft Azure
    • QLM License Server Hosting Service
    • Server Properties
    • License Server Security Hardening
    • How to enable CORS for the QLM License Server
    • How to configure the QLM License Server to handle large requests
    • How to redirect the QLM License Server using URL Rewrite
    • How to configure the QLM to send emails from the server
    • How to redirect your QLM License Server to a new location
    • How to replicate the QLM database to a DR site
    • QLM License Server: Application API v/s Management API
    • QLM License Server - Disaster Recovery Site
    • Troubleshooting tips for SQL Error
    • Error: ExecuteReader requires an open and available Connection.
    • MS-Access - Operation must use an updateable query.
    • IIS features on Windows Server 2012 or higher
    • How to migrate a QLM License Server to another server
    • How to transfer your data from a MS-Access DB to a MS-SQL Server DB
    • How to connect to the QLM License Server via a proxy server
    • Configure a redirect to another QLM License server using a PHP script
    • License Server Performance Tips
    • How to configure the License Server on a system where TLS 1.0 is disabled
    • IIS on Windows 10
    • How to upgrade the QLM License Server
    • How to perform a DB schema upgrade
    • Customizable Server Messages
  • ⛑️Self Help (Customer Site)
    • Overview
    • Configuration
      • Offline Activation Page
      • Deactivate License Page
      • Trial Registration Page
      • Trial Registration Method
      • License Information Page
      • Email Licenses Page
    • Customization and localization
    • Generate a trial key from your web site
    • Restrict trial requests
    • Hide the URL arguments to QlmCustomerSite pages
    • Troubleshooting
      • Why are no products listed on the offline activation page in the QLM Self Help?
  • ☁️QLM Portal
    • What is the QLM Portal?
    • Role Based Access Control (RBAC)
    • QLM Management Console v/s QLM Portal
    • QLM Portal Licensing Terms
    • Activate your QLM Portal license
    • How to brand the QLM Portal
    • QLM Portal Password Policy
    • QLM Portal Two-Factor Authentication
    • Hosting the QLM Portal on Azure
    • How to show new searches in the QLM Portal
    • How to allow a customer to login to the QLM Portal
    • QLM Portal session timeout
    • QLM Portal restricted key access
    • How to enable attaching images to an email
    • Locked out user
    • Which organizations are displayed in the QLM Portal?
    • How to install the QLM Portal
    • How to upgrade the QLM Portal to a new version
  • ☁️QLM Customer Portal
    • Customer Portal Security Measures
    • Customer Portal Deployment
  • ⚙️3rd Party Integration
    • Integrated eCommerce Providers
    • 2Checkout - How to integrate QLM with Avangate / 2checkout
    • BlueSnap - How to integrate QLM with Bluesnap (Plimus)
    • Chargify - How to integrate QLM with Chargify
    • Cleverbridge - How to integrate QLM with Cleverbridge
    • eCommerce Field Mappings
    • FastSpring
      • FastSpring - How to integrate QLM with FastSpring (Classic)
      • FastSpring - How to configure a maintenance plan option in FastSpring
      • FastSpring - How to configure a subscription based product in FastSpring?
      • FastSpring - How to create a license key with a specific Expiry Date in FastSpring
      • FastSpring - How to create a license key with features from FastSpring
      • FastSpring - How to upgrade a license from FastSpring
      • FastSpring - How to integrate with FastSpring's New Contextual Storefront for a Regular Product
      • FastSpring - How to integrate with FastSpring's New Contextual Storefront for a Subscription Product
      • Fastspring HMAC validation
    • Gravity Forms Integration
    • HubSpot
      • QLM HubSpot Integration
      • HubSpot Integration - Contact Creation
      • HubSpot Integration - Deal Creation
    • InnoSetup - Add the QLM files to your InnoSetup
    • Jotform Integration
    • Magento - How to integrate QLM with Magento
    • MailChimp - Quick License Manager Integration with MailChimp
    • MyCommerce (Shareit) - How to integrate QLM with MyCommerce
    • Office 365 Integration
    • PayPal
      • Paypal - Configure Paypal to handle UTF-8
      • Paypal - How to collect Paypal related event logs
      • Paypal - How to create a paypal Buy Now button that integrates with QLM
      • PayPal - How to create a PayPal Shopping Cart Button
      • Paypal - How to integrate Paypal Subscription with QLM
      • Paypal - How to integrate QLM with Paypal?
      • PayPal - How to set the Paypal IPN URL
    • QlmAuthenticationProvider
    • QuickBooks Integration
    • Regnow - How to integrate QLM with Regnow
    • Salesforce integration - how to automatically create a license when an order is activated
    • Shareit - How to integrate QLM with Shareit
    • Shopify - How to integrate QLM with Shopify
    • Stripe - How to integrate QLM with Stripe Checkout
    • SWREG - How to integrate QLM with SWREG
    • UltraCart - How to integrate QLM with UltraCart
    • WooCommerce
      • WooCommerce - How to integrate QLM with WooCommerce
      • WooCommerce - How to create a simple product in WooCommerce
      • WooCommerce - How to use WooCommerce Subscriptions
      • WooCommerce - How to create a maintenance plan product in WooCommerce
      • WooCommerce Payment Providers Configuration
      • WooCommerce - How to handle Downloadable products
      • WooCommerce - How to map WooCommerce variations to QLM features
      • WooCommerce - How to map WooCommerce variations to product properties
      • WooCommerce - How to process a manual order
      • WooCommerce - How to process manual subscriptions
      • WooCommerce - InApp Purchase
      • WooCommerce - Sell an upgrade of a product
      • WordPress - How to integrate the QLM Trial Registration form in WordPress
      • WordPress- How to integrate the QLM Self Help in your WordPress Site
    • Zapier
      • Zapier - QLM Zapier App
      • Zapier - Use Zapier to create a QLM user when a SalesForce lead is created
  • 👣Step by Step Guides
    • Protect a C# app with the QLM License Wizard standalone executable
    • Protect a WinForms app with the QLM License Wizard
    • Protect a VB.NET App with the QLM License Wizard Standalone Exe
    • Protect a .NET Core Console App
    • Protect a service
    • Protect an ASP.NET application with QLM
    • Protect a VB6 app with QLM
    • Protect an Excel Application with Quick License Manager
    • Protect an MS-Access Application with Quick License Manager
    • Protect a VC++ app with Quick License Manager
    • Protect an Embarcadero C++ Builder app with QLM
    • Protect a Qt C++ Windows application
    • Protect a Qt C++ Cross Platform Application
    • Protect a Linux C++ Application
    • Protect a JUCE application
    • Protect an Embarcadero Delphi application with QLM
    • Protect a PHP application with QLM Enterprise
    • Protect a WinForms app with the Activation Control
    • Protect a Xojo Windows app with QLM
    • Protect an Executable without code changes
    • Protect a PDF file with QLM
  • ℹ️How To
    • How do I transfer QLM to another machine?
    • How to upgrade QLM to a new version
    • How to read product properties from a license file
    • How to bind a license to a USB key (dongle)
    • How to release a new version of your product with new encryption keys
    • How to add license file validation
    • How to allow specific customers to work offline indefinitely
    • How to use GetDataSetEx to retrieve customer information
    • How to implement a pay-per-use model with QLM
    • How to use the HTTP API to create a license for a customer
    • How to block computers from activating a license
    • How to assign a specific set of computers to an Activation key
    • How to bind a license to a Docker Container?
    • How to update features using UpdateLicenseInfo
    • How to set the Application Version dynamically
    • Upgrading Product Properties
    • How to fire an event when MaxDaysOffline is reached
    • How to retrieve activation information from the License Server
    • QLM strict authentication for HTTP Methods
    • How to configure and test MaxDaysOffline
    • Fraud Detection - Illegal Computers and Activation Attempts
    • How to parse a feature string and determine the enabled feature
    • How to limit the activation of a node to a time period
    • How can customers deactivate their license?
    • How to deactivate a license in VB.NET
    • How to send your customer an Analytics Usage Report
    • How to create a search that returns trial customers who do not have a purchased license
    • How to upgrade a license from the QLM Management Console
    • How to protect Javascript code
    • How to get the latest enabled features from the server
    • How to protect a .NET Core app with QLM
    • Associate your own custom data to a license
    • How to enable the maintenance plan on activation only
    • How to activate a license
    • How to enable a 3rd party extension (e-commerce provider)
    • How to update your project to add QLM License Protection
    • How to renew the maintenance plan for an offline customer
    • Sharing license information on a given system
    • How to automate license activation for a corporate customer
    • How to migrate from an in-house licensing system to QLM
    • How to export customers
    • How to handle multiple keys of the same product on the same system
    • How to get a Computer Key in offline mode
    • How to track Affiliates/Reseller sales
    • How to add the QLM .NET Controls to the Visual Studio Toolbox
    • How to get the number of allowed activations of a license
    • How to configure the maintenance plan to start upon activation
    • How to use the localized versions of the QLM binaries
    • Import your existing data into QLM
    • How to create a trial key from within your application
    • How to use QLM with VBA without registering QlmLicenseLib.dll
    • Tool to delete registered license keys on a system
    • How to get the list of activated computers
    • How to limit the number of users logged in to a web application
    • How to deactivate a license if a user's computer is dead
    • How to view all expired subscriptions
    • How to schedule a backup of your database
    • How to create a search that shows non active licenses
    • How to deactivate a license on a mobile device
    • How to determine which QLM DLL is loaded
    • How to generate a trial key for your application
    • How to call AddUser from C++
    • How to embed a number in the license key
    • How to use computer bound keys with QLM Express
    • How to configure QLM Express to not connect to the Demo License Server
    • How to register QlmLicenseLib.dll for non .NET applications running on Windows
    • How to clear license keys from an end user system
    • How to call the Analytics API from C++
    • How to extend a license subscription from a URL
    • How to define the user / password associated to an eCommerce provider
    • How to limit the number of trial license keys a customer can use
    • QLM Unity3d Licensing Sample
    • How do I make my license keys computer bound?
    • How to make license keys work with different versions of a product?
    • How to extend the expiry date for a customer?
    • How to call CreateLicenseKeyEx2 from ASP?
    • How can I quickly tell the type of a license key?
    • How to call UpdateLicenseInfo and update UserData with an XML fragment
    • How to call ParseResultsEx from C++
    • How to configure Outlook's security warning
    • How to validate if a license was revoked on the server?
    • How to use Generic license keys
    • How to issue activation keys with multiple activations from an eCommerce provider
    • How to ship an evaluation version of your software?
    • How to set the maintenance plan duration from an ecommerce provider
    • How to get the last modified licenses
    • How to protect a Java Desktop Application with QLM Enterprise
    • How to protect a Mac OS X application with QLM Enterprise
    • How to protect an iOS App with QLM Enterprise
    • How to protect an Android App developed in Xamarin with QLM
    • How to protect an Android App with QLM Enterprise
    • How to protect a cross platform Qt application with QLM Enterprise
    • How to automatically invoke a webhook using Scheduled Tasks
    • How to configure the QLM License Wizard to allow Offline Activation only
    • HTTP API examples
    • How to load an existing XML Settings file in the Protect Your App wizard
    • Common Searches
    • How to add the QLM User Controls to the Visual Studio Toolbox
    • How to filter data by feature
  • ❔FAQ
    • How do I change the license binding to a different identifier?
    • How to reserve licenses for a list of users
    • Bloated License Server Database
    • Why are enabled features not shown when I hover over an Activation Key?
    • Loading different versions of QlmLicenseLib.dll from the same process
    • Available options for controlling the expiry date of a license
    • GDPR Data Deletion Request
    • How to test a connection to a SQL Server
    • Seeing activation notifications from the License Server?
    • How to show the Generate Keys tab
    • Difference between the License Expiry Date and the Maintenance Plan Expiry Date
    • Where are my products' definition stored?
    • How to restore the default searches in the QLM Management Console
    • You have exceeded the maximum number of activations allowed per system.
    • How to configure the QLM Management Console Date format to match your SQL Server's
    • What is the difference between cloud-based and on-premise floating licenses?
    • MaxDaysOffline
    • Which QLM features are available on each platform?
    • Which edition of QLM should I use?
    • How to check which features are enabled in your QLM license
    • Product definition changes are not saved
    • How to create an Activation Key with Product Properties
    • Error: Configuration system failed to initialize
    • How to get an Organization ID from an Organization Name
    • Why does ReadKeys return the wrong key
    • How to prevent reuse of deactivated keys
    • How to recover from a corrupted xml configuration file
    • How to read Product Properties from a data set
    • Why does ReadKeys still return a key after calling DeleteKeys?
    • How to delete a record for a specific ComputerID
    • How to use Fiddler to diagnose connectivity issues with the QLM License Server
    • How to fix the QLM Management Console opening off the screen
    • SQL Conversion Error
    • QLM Management Console and QLM License Server Versions
    • QLM client side requirements
    • Error parsing results: Unexpected DTD declaration
    • How to limit the number of deactivations
    • How to reinitialize the built-in Demo products
    • How to allow multiple product versions on the same system
    • How to check if features were updated on the server
    • Re-signing the xml settings file after modification
    • How to activate a license programmatically from VC++
    • How to prevent the QLM Management Console from overwriting local email templates
    • Property path is incorrect for type
    • How to bind a license to your own unique identifier
    • How to create a search to show licenses associated to a Reseller / User Group
    • The number of allowed activation keys per client has now been exceeded
    • How to bind a license to multiple identifiers, serially
    • How to determine the version of the License Server
    • Access is denied message when validating a signature
    • QLM v11 GDPR Support
    • How to create a QlmLicense object in VB6 or VBA
    • Error: Invalid column name 'xxx' in the QLM Management Console
    • QLM License Wizard cannot read a settings file when located on a mapped drive
    • QLM Portal - Remember User Name / Password
    • QLM on Non-Windows Platforms
    • How to increase the number of activations per license
    • How to change the date format in the QLM Management Console
    • ConfuserEx
    • How to prevent an Excel sheet from opening if macros are disabled
    • Cannot access a disposed object
    • License Wizard or Activation Form is displayed eventhough the license is activated
    • Error when calling Analytics AddInstall method
    • How to activate your trial or purchased license of Quick License Manager
    • When is the LastAccessedDate field updated
    • How to cleanup an orphaned QLM installation
    • QLM Demo License Server
    • How to prevent a user from running multiple instances of your app
    • Could not find product x.y
    • How to update the CommunicationEncryptionKey and AdminEncryptionKey
    • Distinguish between a trial and a subscription
    • How to get the activated computers for a given activation key
    • Why is the license not stored (or deleted) at the machine level even if the user is an Administrator
    • How to use late binding in Excel and Access
    • Error 80131700, 8013101b, 80131515 when instantiating a QLM object
    • How to get information about a license key
    • How to create a product with STD and PRO editions as features
    • How does QLM protect an application hosted on a Virtual Machine (VM)?
    • How to tighten binding to a virtual machine
    • What happens to QLM license keys when a user upgrades to Windows 10
    • Microsoft .NET Framework Client 4.0 could not be installed.
    • Getting Started with Quick License Manager Enterprise
    • Getting Started with Quick License Manager Express
    • Getting Started with Quick License Manager Professional
    • How to extend a subscription in offline mode
    • Handling computer ID with multibyte characters
    • PHP Sample to generate a license key
    • How to get customer information for a license key?
    • How I got the Sample QLM Delphi program working on my computer
    • What is the syntax of is_features
    • All orders search does not show any records
    • Should I use the .NET 4.0 or the .NET 2.0 DLLs?
    • Which QLM DLLs do I need to distribute with my application
    • Terminal Server Support
    • How to get the QLM License Server Event Log
    • Which DLLs do you need to distribute with your C++ application
    • QLM still shows Demo even after activating your purchased license
    • Registering the QLM Dlls for VB6, Office and non .NET apps
    • StoreKeys options
    • QLM Pricing
    • What Operating Systems does Quick License Manager support?
    • Can a user back date their computer to run an trial version?
    • StoreKeys and ReadKeys
    • How to ship an evaluation version of your software
    • How to configure QLM Pro to connect to your local License Server
    • How can I use more than 32 features with QLM Pro?
    • How to disable features in the web service
    • How to parse data returned by GetDataSet or GetDataSetEx
    • How does QLM protect against users requesting additional activations because a computer died
    • What DLLs do you need to ship with your application?
    • What version of QlmLicenseLib.dll should I use?
    • How to revoke a license ?
    • Protect calls to GetActivationKey
    • Registration-Free Activation of QlmLicenseLib.dll
    • How to hide sensitive information from a third-party developer
    • How to update the ClientVersion / ApplicationVersion
    • How to change the name of your product
  • ⁉️Troubleshooting
    • Diagnosing network connectivity issues with the QLM License Server
    • Tool to test network connectivity
    • Troubleshoot issues with the QLM WordPress / WooCommerce plugin
    • How to Diagnose ReadKeys issues
    • How to diagnose "The license key is invalid" message
    • Could not load file or assembly 'DevExpress.XtraWizard.v10.2, Version=10.2.3.0
    • Error calling any QLM API
    • Your license key does not allow you to call the QLM Pro API
    • An attempt was made to load a program with an incorrect form
    • IsolatedStorageException calling StoreKeys in an ASP.NET application
    • Error instantiating QLM object in Microsoft Excel
    • Failed to validate request because the time between server and client is not synchronized
    • Failed to decrypt data message
    • Error: The private key is not base64-encoded.
    • Could not load the file or assembly 'DevExpress.XtraWizard.v10.2
  • 🅱️Blog
    • Providing full source code – the comforting myth
    • Iterative Releases
    • What is online license activation?
    • Grow your company with steady recurring revenue
    • Binding a license key to a computer
    • Ease the license activation burden for large enterprises
    • Integrate a "Check for Updates" feature with your software license protection process
    • Quick License Manager integrates with commerce provider FastSpring
  • 👩‍🔬Customer Contributions
    • QLM Pro .NET Control Sample in VB.NET
    • QLM Express - Fortran Interface
    • Protecting a C++ Builder application
  • ⚖️Legal stuff
    • QLM Express Licensing Terms
    • QLM Pro Licensing Terms
    • QLM Enterprise Licensing Terms
    • QLM Document Protection Licensing Terms
    • QLM SDK Protection Licensing Terms
    • What is the QLM Yearly Maintenance Plan
  • 📹Video Tutorials
  • ⚙️API Reference
    • Overview
    • .NET API
      • IQlmLicense
        • Enums
          • ECommunicationProtocolType
          • EComputerType
          • ELicenseBinding
          • ELicenseModel
          • ELicenseStatus
          • ELicenseType
          • EOfflinePeriodExceededAction
          • EOrderStatus
          • EServerErrorCode
          • EStoreKeysOptions
          • EStoreKeysTo
        • Properties
          • DateTamperingGracePeriod
          • ELicenseStatus
          • EnableSoapExtension
          • EncryptionAlgorithm
          • EvaluationPerUser
          • ExpiryDateRoundHoursUp
          • FavorMachineLevelLicenseKey
          • FloatingLicenseMaxOfflineDuration
          • LicenseBinding
          • LimitTerminalServerInstances
          • MaxDaysOffline
          • OfflinePeriodExceededAction
          • Private Key
          • PublicKey
          • SimulatedDateTime
          • StoreKeysLocation
          • StoreKeysOptions
          • Timeout
          • UniqueSystemIdentifierExceptions
          • ValidateOnServer
        • Client Side Methods
          • CreateDeactivationCode
          • CreateLicenseKey
          • CreateLicenseKeyEx
          • CreateLicenseKeyEx2
          • CreateLicenseKeyEx3
          • CreateLicenseKeyEx4
          • CreateLicenseKeyEx5
          • DefineProduct
          • DeleteCookie
          • DeleteKeys
          • DeleteKeysEx
          • FormatLicenseKeyEx
          • GetALicenseTypeFromKey
          • GetDaysOffline
          • GetNumberOfRunningInstances
          • GetStatus
          • IsEvaluation
          • IsFeatureEnabled
          • IsFeatureEnabledEx
          • IsLicenseKeyACloudLicense
          • IsLicenseKeyAFloatingLicense
          • IsLicenseKeyAPermanentLicense
          • IsLicenseKeyASubscriptionLicense
          • IsLicenseKeyATrialLicense
          • IsLicenseModelACloudLicense
          • IsLicenseModelAFloatingLicense
          • IsLicenseModelAPermanentLicense
          • IsLicenseModelASubscriptionLicense
          • IsLicenseTypeACloudLicense
          • IsLicenseTypeAFloatingLicense
          • IsLicenseTypeAPermanentLicense
          • IsLicenseTypeASubscriptionLicense
          • IsLicenseTypeATrialLicense
          • IsLicenseModelATrialLicense
          • IsValid
          • LaunchProcess
          • LoadSettings
          • ParseProductProperties
          • ParseResults
          • ReadActivatedLicenseFile
          • ReadCookie
          • ReadKeys
          • ReadLicenseFile
          • ReadLicenseXml
          • ReadProductPropertiesFile
          • StoreCookie
          • StoreKeys
          • StoreKeysEx
          • ValidateFile
          • ValidateLicense
          • ValidateLicenseEx
          • ValidateLicenseEx2
          • ValidateLicenseEx3
          • ValidateSignature
          • VerifyActivatedLicenseFile
        • Application Methods
          • ActivateLicense
          • ActivateLicenseByAuthorizationCode
          • ActivateLicenseByAuthorizationCodeEx
          • ActivateLicenseByAuthorizationCodeEx2
          • ActivateLicenseByBasicAuthentication
          • ActivateLicenseByField
          • ActivateLicenseDialog
          • ActivateLicenseEx
          • ActivateLicenseForUser
          • ActivateLicenseForUserEx
          • ActivateLicenseForUserEx2
          • ActivateLicenseForUserEx3
          • ActivateLicenseForUserEx4
          • AddUser
          • AddUserEx
          • AddUserEx2
          • AddUserEx3
          • CreateComputerBoundTrialKey
          • DownloadLicenseFileFromServer
          • DownloadProductPropertiesFromServer
          • GetActivatedSystems
          • GetActivationKeyFromLegacyKey
          • GetActivationKeyFromOrderID
          • GetActivationKeyFromUserData
          • GetActivationLog
          • GetActivationLogLicenseInfo
          • GetCustomerInfo
          • GetDashboardInfo
          • GetDashboardLicenseInfo
          • GetLatestEligibleVersion
          • GetLatestVersion
          • GetLicenseFile
          • GetLicenseInfo
          • GetMaintenancePlanRenewalDate
          • GetMaintenancePlanRenewalDateByComputerKey
          • GetOrder
          • GetProductInfo
          • GetProductProperties
          • GetRemainingActivations
          • GetServerProperty
          • GetSubscriptionExpiryDate
          • GetUserData
          • GetUserDataFromActivationLog
          • IsIllegalComputer
          • IsLicenseKeyActivated
          • IsLicenseKeyRevoked
          • IsLicenseKeyValid
          • Ping
          • PingEx
          • ReactivateLicense
          • ReactivateLicenseEx
          • ReleaseLicense
          • ReleaseLicense
          • ReleaseLicense
          • ReleaseLicense
          • ReleaseLicense
          • RequestAuthorizationCodeForActivation
          • SetUserData
          • SetUserDataInActivationLog
          • SubscribeToMailList
          • UpdatePrivacyConsent
          • UpdateUser
          • UpdateUserEx
          • UpdateUserEx2
          • UpdateUserEx3
          • UpdateUserEx4
          • ValidateLicenseFile
          • ValidateLicenseFileContent
          • ValidateLicenseOnServer
          • ValidateLicenseOnServerEx
          • ValidateLicenseOnServerEx2
          • ValidateLicenseOnServerEx3
          • WriteProductPropertiesFile
        • Management Methods
          • AddOrganization
          • CreateActivationKey
          • CreateActivationKeyEx
          • CreateActivationKeyWithExpiryDate
          • CreateActivationKeyWithExpiryDateEx
          • CreateActivationKeyWithExpiryDateEx2
          • CreateActivationKeyWithExpiryDateEx3
          • CreateActivationKeyWithExpiryDateEx4
          • CreateActivationKeyWithExpiryDateEx5
          • CreateActivationKeyWithExpiryDateEx6
          • CreateActivationKeyWithExpiryDateEx7
          • CreateActivationKeyWithExpiryDateEx8
          • CreateActivationKeyWithExpiryDateEx9
          • CreateOrder
          • CreateOrderEx
          • CreateUserAccount
          • DeleteLicense
          • DeleteOrganization
          • DeleteUser
          • DeleteUserAccount
          • DeleteUserEx
          • DownloadProducts
          • GetCustomersInfo
          • GetCustomersInfoEx
          • GetDataSet
          • GetDataSetEx
          • GetDataSetEx2
          • GetOrganization
          • RenewSubscription
          • RevokeLicense
          • SetMaintenancePlanRenewalDate
          • SetProductProperties
          • UpdateActivationLogInfo
          • UpdateLicenseInfo
          • UpdateLicenseKey
          • UpdateOrderStatus
          • UpdateOrganization
          • UpdateUserAccount
          • UpgradeLicense
          • UpgradeLicenseEx
          • UploadProducts
      • ILicenseInfo
        • Methods
          • LoadLicenseXml
        • Properties
      • IQlmHardware
        • GetActiveDirectoryAppDomain
        • GetActiveDirectoryComputerDomain
        • GetBiosUuid
        • GetFirstMACAddress
        • GetLoggedInUser
        • GetMACAddresses
        • GetMachineName
        • GetMotherBoardSerialNumber
        • GetSMBiosUUID
        • GetTerminalServerUniqueIdentifier
        • GetUniqueCombinedSystemIdentifier
        • GetUniqueSystemIdentifier1
        • GetUniqueSystemIdentifier2
        • GetUSBSerialNumber
        • GetUSBSerialNumber
        • GetVolumeSerialNumber
        • IsRunningAsUwp
        • RunningInDockerContainer
        • RunningOnHyperV
        • RunningOnTerminalServer
        • RunningOnVirtualBox
        • RunningOnVM
        • RunningOnVMWare
      • IQlmCustomerInfo
        • Properties
        • Methods
          • ParseResults
      • IQlmOrganizationInfo
        • Properties
      • IQlmAnalytics
        • Methods
          • AddInstall
          • AddInstallEx
          • ReadInstallID
          • RemoveInstall
          • UpdateInstall
          • UpdateInstallEx
          • UpdateLastAccessedDate
          • WriteInstallID
      • IQlmCloudFloatingLicenseHelper
        • Methods
          • CheckinLicense
          • CheckoutLicense
          • DeactivateAllExpiredLicenses
          • GetOfflineInformation
          • GoOffline
          • GoOnline
          • ProcessOrphanedInstances
        • Properties
      • IQlmFloatingLicenseHelper
        • Enums
          • ELicenseKind
          • QlmActivationStatus
        • Properties
        • Methods
          • GetFloatingLicenseLocation
          • GetLicenseKind
          • Init
          • Load
          • PublishFloatingLicenseLocation
          • RegisterNode
          • UnregisterNode
          • ValidateLicense
      • IQlmFloatingLicenseMgr
        • Properties
      • IQlmProductInfo
      • IQlmProductProperties
        • Properties
        • Methods
          • AddProductProperty
          • Deserialize
          • GetProperties
          • GetProperty
          • Serialize
          • ValidateSignature
      • IQlmProductProperty
        • Properties
      • LicenseValidator
        • Properties
        • Methods
          • DeleteAllKeys
          • ValidateLicense
          • ValidateLicense
          • ReactivateKey
          • ValidateLicenseAtStartup
          • ValidateLicenseAtStartup
          • ValidateLicenseAtStartup
    • HTTP Methods
      • ActivateKey
      • ActivateKeyByAuthorizationCodeHttp
      • AnalyticsAddInstallHttp
      • AnalyticsRemoveInstallHttp
      • AnalyticsUpdateInstallHttp
      • AnalyticsUpdateLastAccessedDateHttp
      • EnableMaintenancePlan
      • GetActivationKey
      • GetActivationKeyWithExpiryDate
      • GetLatestVersionHttp
      • PingHttp
      • ReleaseLicenseHttp
      • RenewMaintenancePlan
      • RenewSubscriptionHttp
      • RequestAuthorizationCodeForActivationHttp
      • RetrieveActivationKeyHttp
      • RevokeLicenseHttp
      • SubscribeToMailListHttp
      • UpdateLicenseHttp
      • UpdatePrivacyConsentHttp
      • UpdateUserInformation
      • UpgradeLicense
      • ValidateLicenseHttp
    • License Wizard User Control
      • UI Properties
      • Image Properties
      • Behavior Properties
      • User Registration Properties
      • License Properties
      • On-premise Floating License Properties
      • Events
    • Activation User Control
      • Properties
      • Events
Powered by GitBook
On this page
Edit on GitHub
  1. FAQ

How I got the Sample QLM Delphi program working on my computer

PreviousHow to get customer information for a license key?NextWhat is the syntax of is_features

Last updated 1 year ago

This article is now superseded by an improved article found .

[This is a contribution from one of our customer]

I wrote these notes after I configured QLM's Delphi sample program to work with my copy of Delphi. I wanted to share this information with other Delphi programmers to help make it easier for you to get QLM up and running.

I was using Delphi 2010 on 32-bit Vista. The steps that you take may be different depending on your version of Delphi and Windows.

1. Install the trial edition of QLM.

Your Windows user account needs to be set to Administrator to install QLM with no errors. I normally run my Windows user account as Standard, so in my case I had to switch it to Administrator then reboot before installing QLM.

2. Copy the IsLicense50.dll files to the correct locations

I'm not sure why Soraco doesn't do this for you automatically during the QLM installation, but at the time I wrote this they don't. So you need to do it.

Using File Explorer, navigate to the C:\Program Files\Soraco\QuickLicenseManager\Redistrib folder.

Copy (don't cut) the x64 and x86 folders to your Windows clipboard. These folders contain different versions of IsLicense50.dll

Navigate to the ".net 2.0" folder, which is right in front of you under C:\Program Files\Soraco\QuickLicenseManager\Redistrib,

Paste the copies of the x64 and x86 folders so that they become subfolders of the ".net 2.0" folder.

3. Register the QlmLicenseLib.dll assembly on your system

QlmLicenseLib.dll is a .NET assembly file. You do NOT use regsvr32.exe to register it. Instead, you need to use RegAsm.exe.

I created a batch file on my computer to do the deed. The line below is what I put in the batch file:

"C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" "C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\.net 2.0\QlmLicenseLib.dll" /codebase

NOTE: If your OS is 64 bit and your app is 64 bit, you need to use this path to register QlmLicenseLib.dll:

"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe" "C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\.net 2.0\QlmLicenseLib.dll" /codebase

Of course, you should confirm the paths to RegAsm.exe and QlmLicenseLib.dll on your computer and adjust your batch file accordingly.

Note: Even though my user account was set to Administrator status, to make the batch file run properly I had to start the batch file by right-clicking it and selecting RUN AS ADMINISTRATOR.

4. Open the QLM Sample Program for Delphi.

You will find the Delphi QLM Pro sample program at:

C:\Users\Public\Public Documents\Quick License Manager\Samples\qlmpro\Delphi

I copied that folder over to my user account's Documents folder, for easy access and to make sure I maintained an original copy of the sample files in case I messed things up.

In your copy of Delphi, open QLMProSample.dproj

5. Regenerate the QLMLicenseLib_TLB.pas and mscorlib_TLB.pas component wrapper files.

Since I was going to recreate these component wrapper files, first I renamed the ones that shipped with the sample program (call me a hoarder, but I didn't want to overwrite/delete them). So these files...

IsLicense50_TLB.pas mscorlib_TLB.pas QlmLicenseLib_TLB.pas

were renamed to...

z_IsLicense50_TLB.pas (Note: This file isn't regenerated in my instructions because it doesn't appear to be needed by QLM. As far as I know, you can rename it and forget it.) z_mscorlib_TLB.pas z_QlmLicenseLib_TLB.pas

With the old files safely renamed, here's how to regenerate the component wrapper files:

*** This steps appears to be broken from the Delphi GUI ***

*** If you get an error importing the .NET DLL, proceed with the steps at the end of this section ***

From Delphi's menu select Component > Import Component

Select Import .NET Assembly, then click the NEXT button.

A list is populated with the Registered Assemblies on your computer. This may take a few seconds.

Do NOT select anything in the list of components.

Click the ADD button.

Navigate to C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\.net 2.0 and select QlmLicenseLib.dll.

Click the OPEN button.

The Import Component window shows your selected file in the list.

Click the NEXT button.

I wanted to share the QLM component wrapper files for several Delphi programs, so I wanted the wrappers in a common shared folder. In the Unit Dir Name box, I selected C:\Users\\Documents\RAD Studio\\Imports

Leave the Search Path alone.

Make sure the Generate Component Wrappers box is checked.

Click the NEXT button

Select Add Unit To Project.

Click the FINISH button.

Wait a few seconds for the process to complete. This generates new QLMLIcenseLib_TLB and mscorlib_TLB files in the folder that you specified in the Unit Dir Name box.

*** End of adding .NET component- if this step failed, you can use the following command line tool to regenerate the wrapper code ***

*** Command line way of generating the wrapper classes ***

> tlibimp -P "C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\.net 2.0\QlmLicenseLib.dll"

This will generate a set of classes that you can copy to the project folder.

***

You should be ready to run the sample program. I hope it works for you!

6. Extra Credit

Here are some additional tips to improve the functionality of the QLM Delphi sample program.

A. Closing the license activation form.

I edited two procedures in QlmLicenseFrm.pas as shown below to allow the form to close by clicking the Close button once, rather than twice. Also, setting modalresult in QLMlicenseFrm lets you easily organize how to handle exiting the form and/or program. For example, if an invalid registration key was entered, you could set the ModalResult to mrAbort, show a message then shut down the entire app.

procedure DisplayLicenseForm(Const wsu, cek : String);

var

i:integer;

begin

LicenseForm := TLicenseForm.Create(nil);

// Application.CreateForm(TLicenseForm, LicenseForm);

LicenseForm.webServiceUrl:=wsu;

LicenseForm.communicationEncryptionKey:=cek;

i := LicenseForm.ShowModal();

LicenseForm.Release;

case i of

mrAbort:

begin

ShowMessage('ShowModal result: Abort (due to registration key failed).' +

'You need to enter a valid registration key.');

//Close down the whole application. In this situation, it's

//best to use this method of exiting the program because the main

//form is still not completely created yet, so you can't just

//close that to shut things down.

PostMessage(Application.handle, WM_CLOSE, 0, 0);

end;

mrClose, mrCancel:

//Go back to the main app. Let it finish loading.

ShowMessage('ShowModal Close or Cancel called. Back to the main form we go.');

end;

end; // DisplayLicenseForm

procedure TLicenseForm.btnCloseClick(Sender: TObject);

begin

// Close;

ModalResult := mrClose;

end;

B. Testing for embedded Feature flags

You can add this function to the LicenseValidator.pas file to test the QLM license for enabled features:

function TLicenseValidator.isFeatureEnabled(featureSet: Integer; featureID: Integer): Boolean;

begin

Result := license.IsFeatureEnabledEx(featureSet, featureID);

end;

C. Distribution Note

When you distribute your application, you will need to install QlmLicenseLib.dll on the customer's computer. Soraco recommends that you put it in C:\Program Files\Common Files\Soraco

Then under that folder, create two subfolders, x86 and x64

Into the x86 folder, copy IsLicense50.dll from C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\x86

Into the x64 folder, copy IsLicense50.dll from C:\Program Files\Soraco\QuickLicenseMgr\Redistrib\x64

Finally, as part of your installation routine, you'll need to run RegAsm /codebase on the QlmLicenseLib.dll file to register it on the end user's computer.

I hope that these instructions will help you use QLM with Delphi!

-Chris

❔
here