View previous topic :: View next topic |
Author |
Message |
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Wed Nov 23, 2016 6:32 am Post subject: Licensing non-UI product and trials |
|
|
I am trying to embed the Infralution Licensing into a non-ui product (it's a .net DLL). I have made a lot of progress with this, integrated both the AuthenticatedLicenseProvider and the EncryptedLicenseProvider.
I'd like to do this scenario, this would be the perfect scenario:
1. Have user install and have access to all functionality right from the get go
2. Preferably, no manual activation needed
3. After a time period, say 30 days, the license converts to a "community edition" that allows some functionality.
4. If the user decides to purchase the full edition, they receive an Authenticated License.
So Far:
1. I *believe* I cannot use the EvaluationMonitor/EvaluationDialog because of the nature of my product being a DLL with no UI (no WindowsBase, etc), plus even if it did the entry process is not a windows form app.
2. I have chosen to use Infralution.Licensing.ASP as the licensing provider (again no Windows Forms). This seems like the best choice.
Questions:
1. Can I do the above scenario and what would be the best way?
2. I have looked at the AuthenticatedLicense.FirstAuthenticationDate. I was thinking about using that to help with the "trial" license. If I included that license in the product distribution, would that date be the first auth date for that instance or for any instance. In other words, if two users download the product with that license and activate on different dates, would they both have the same FirstAuthenticationDate. Obviously if so, that would be a failure.
Other thoughts?
Thanks!
Tim
[/u] |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Fri Nov 25, 2016 3:21 am Post subject: |
|
|
Sorry I missed your post. I think you will be able to achieve your goals - but a little more information will clarify the best approach.
Is your DLL being used from a process which won't have access to the user interface eg a windows service? If that is the case then you won't be able to use the UI forms to show the evaluation status or install the license directly from the DLL. If your DLL is a plug in for a product which does have a UI then you should still be able to use the UI forms
Who are you selling the DLL to - is to end users (eg a plugin for a product) or to application developers who will distribute it with your product? This will affect how you choose to do licensing. _________________ Infralution Support |
|
Back to top |
|
|
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Sun Nov 27, 2016 10:16 pm Post subject: |
|
|
[quote="Infralution"]Is your DLL being used from a process which won't have access to the user interface eg a windows service?[quote]
Correct.
[quote="Infralution"] Who are you selling the DLL to - is to end users (eg a plugin for a product) or to application developers who will distribute it with your product? This will affect how you choose to do licensing.[quote]
No. It is a DLL to be used from any custom application, either another DLL or another EXE, neither of which would necessarily have any windows components.
Please advise. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Mon Nov 28, 2016 9:31 pm Post subject: |
|
|
Since you don't want end users to have to install anything I would probably recommend using simple encrypted license keys which the client application would supply before using the DLL. See the following thread:
http://www.infralution.com/phpBB2/viewtopic.php?t=1842 _________________ Infralution Support |
|
Back to top |
|
|
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Wed Nov 30, 2016 6:28 am Post subject: |
|
|
Thanks.
How do I achieve "After a time period, say 30 days, the license converts to a "community edition" that allows some functionality."?
Thanks |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Wed Nov 30, 2016 9:10 am Post subject: |
|
|
You can use the RegistryEvaluationMonitor class to do this (without using the EvaluationDialog interface). Creating an instance of this allows you to determine the time since the software was first used. You can then limit your functionality after 30 days. Note that, as with any method that stores data on your computer, the RegistrationEvaluationMonitor can potentially be circumvented by a an astute user by either using registry monitoring tools or by resetting their computer or vm to a restore point prior to the software use. For this reason we normally recommend that you limit your functionality in some other way when running in unlicensed evaluation mode. _________________ Infralution Support |
|
Back to top |
|
|
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Wed Nov 30, 2016 5:26 pm Post subject: |
|
|
So, if I want to use a more "foolproof" way, I would need to use an AuthenticatedLicense, correct?
And the *only* way to use an AuthenticatedLicense is to issue a key, correct?
So, the user would be requried to enter the key, either by calling a method in the DLL or using a separate GUI based "unlocking" tool.
Are all of those above assumptions correct?
Or, is there some way to issue the AuthenticatedLicense in an automated manner? |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Thu Dec 01, 2016 12:35 pm Post subject: |
|
|
Issuing free Authentication License Keys does not really get you around the issue. Since it is generally not difficult for customers to create multiple email addresses and so simply obtain a new free key under a different email address that they can then use. _________________ Infralution Support |
|
Back to top |
|
|
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Fri Dec 02, 2016 12:34 am Post subject: |
|
|
So, here's what I think I'm going to do. Please let me know if I am making any egregious errors. Thanks.
1. In my licensing provider (a subclass of LicenseProvider), I'm going to first look for an AuthenticatedLicense.
2. If the AuthenticatedLicense is not found, then I'll use the RegistryEvaluationMonitor as you suggested. If it is "expired", I'm going to then look for an EncryptedLicense. If it is not expired, all good, everything is licensed.
3. This EncryptedLicense (from above) will be for the "community edition" components. (I have decorated all classes within the library with LicenseProviderAttribute because I have a unit test to check all public non-abstract class for the LicenseProviderAttribute. This way I cannot checkin a new class that I have NOT "addressed" the licensing concerns with it. I could have these "community edition classes" not have any LicenseProviderAttribute, but I feel this is a good fail-safe to not release something that is intended to be for an edition beyond the community.
3. So, out of the above, we have the "best" license, validate the type against it.
Make sense? |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Fri Dec 02, 2016 4:57 am Post subject: |
|
|
It sounds a little complicated. If you want to use an AuthenticatedLicense the it has to be installed for each computer (because the license is authenticated against a particular computer). You can use a separate program to do this installation - but normally if you are providing a component for client companies to distribute to their users you would not want to force this requirement on to their users.
If your component has different design time capabilities to those used by the end user (as user controls do) then you can use an AuthenticatedLicense for design time use and then generate an encrypted license (from the AuthenticatedLicense.LicenseKey) which can be distributed to end users by calling AuthenticatedLicenseProvider.GetEncryptedLicenseProvider to obtain the EncryptedLicenseProvider object and then call GenerateRuntimeKey on this object. This can also be complicated to setup (except for user controls where the designer does the work for you). _________________ Infralution Support |
|
Back to top |
|
|
hounddog
Joined: 21 Nov 2016 Posts: 9
|
Posted: Fri Dec 02, 2016 2:57 pm Post subject: |
|
|
Infralution wrote: | It sounds a little complicated. If you want to use an AuthenticatedLicense the it has to be installed for each computer (because the license is authenticated against a particular computer). You can use a separate program to do this installation - but normally if you are providing a component for client companies to distribute to their users you would not want to force this requirement on to their users.
If your component has different design time capabilities to those used by the end user (as user controls do) then you can use an AuthenticatedLicense for design time use and then generate an encrypted license (from the AuthenticatedLicense.LicenseKey) which can be distributed to end users by calling AuthenticatedLicenseProvider.GetEncryptedLicenseProvider to obtain the EncryptedLicenseProvider object and then call GenerateRuntimeKey on this object. This can also be complicated to setup (except for user controls where the designer does the work for you). |
Yeah, the component is not redistributed. The component is the licensed application, so having to have other users acquire and unlock the component will not be necessary. |
|
Back to top |
|
|
|