To keep TurboActivate.exe simple

Okay, I'm starting to get a handle on using TurboActivate but please tell me if I'm missing something.

My Inno install script asks for the license before installation continues.My program does not allow trials.My program might be started and restarted several times a day.Now, when my program starts ... I propose that the program do these things;

** Every start: My program checks that "TurboActivate.dll" exists. If the file does not exist then I call TurboActivate.exe which automatically analyzes the current state of affairs and offers to correct any problem it finds (reactivate, re-enter license, get a license).

** Every start: My program then calls "IsProductKeyValid" which will identify any problems with "TurboActivate.dat" and will automatically call up TurboActivate.exe if a problem does exist (though it won't necessary give much information so I might add my own message box as well).

** Every start: My program then calls "IsActivated". If not activated then my program starts TurboActivate.exe which automatically analyzes the current state of affairs and offers to correct any problem it finds (reactivate, re-enter license, get a license).

** Twice a month: My program runs "IsGenuine". If there is a problem then "IsGenuine" automatically starts TurboActivate.exe and again the customer is offered alternatives.

Since both "IsActivated" and "IsGenuine" require Internet access to your servers I allow a certain number of program starts with increasing nag screens if TurboActivate can't get access to your servers. At a certain point (I have yet to determine) I will run "Deactivate" but give them the link to visit my web site and request help.

That seems like it would do the job, but I am probably missing something. What do you suggest?

** Every start: My program checks that "TurboActivate.dll" exists. If the file does not exist then I call TurboActivate.exe which automatically analyzes the current state of affairs and offers to correct any problem it finds (reactivate, re-enter license, get a license).

If TurboActivate.dll doesn't exist then the end-user probably deleted it. In that case just show the user an error and redirect them to a webpage on your website. For instance, you could tell them to reinstall your app.

Since both "IsActivated" and "IsGenuine" require Internet access to your servers I allow a certain number of program starts with increasing nag screens if TurboActivate can't get access to your servers. At a certain point (I have yet to determine) I will run "Deactivate" but give them the link to visit my web site and request help.

IsActivated does not require internet access. If it fails (i.e. the return is not TA_OK) then stop them from entering your app. Show TurboActivate.exe to let the user activated.

If IsGenuine() fails, and the return code is not TA_E_INET, then you should similarly stop them from entering your app -- show TurboActivate.exe. If IsGenuine() is a success, then schedule the next check 90 days in the future. If IsGenuine() return TA_E_INET then continue to try for the next week or so, warn the user about not being able to connect to the internet, then after a week or so of not being able to connect, stop the user from entering your app.

Does that make sense/

Great. I can do that.

Thanks so much for the prompt reply.

Okay, almost there now but I want to check something out.

1. My customer starts to install my program.2. They insert the license key.3. The Inno setup program runs the LimeLM script...... a. the script checks the license key is valid (online?)...... b. the script encodes identifying information about the computer being used.4. TurboActivate.dat now has the license key and the encoded information

5. When my program starts it calls IsActivated() which checks the encoded information against the computer being used.

6. If the return from IsActivated() is not TA_OK then the information didn't check out (maybe it's being run on the wrong computer, or it has been deactivated) so my program runs TurboActivate.exe

So I'm thinking that IsActivated() is enough of a check for me. There doesn't need to be any online check at all.

The IsGenuine() check would only be of use if I was to delete a product key. I can't imagine why I would want to delete the product key, and if I did delete it I don't know why I'd care that someone kept using the product after I canceled the key.

I'm probably missing something here, but you're such a good teacher I'm looking forward to your feedback.

4. TurboActivate.dat now has the license key and the encoded information

No, TurboActivate.dat is just an information file. It remains unchanged before/after an activation. The actual license data is stored elsewhere.

The IsGenuine() check would only be of use if I was to delete a product key. I can't imagine why I would want to delete the product key, and if I did delete it I don't know why I'd care that someone kept using the product after I canceled the key.

I'm probably missing something here, but you're such a good teacher I'm looking forward to your feedback.

That's basically true. If you don't mind a user using a key after it was revoked or deleted, then you don't need to use IsGenuine().