** 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/