Deactivate all activations with one call?

Hi There,

Is it possible to deactivate all activations with a call from the C++ API? If a user has enabled all activations, then goes to another machine and tries to activate, I wanted to give them the option to deactivate all machines so they can activate the one they are on. Is it possible to do this without going through a loop?

Thanks,Arie

Hey Arie,

I'm a little bit confused about what you're asking. An "activation" locks a product key to a particular computer. So you can only deactivate a computer once on that computer (there's nothing to "loop over").

If you're talking about remote-deactivation (using the web API), then yes, you'll have to loop over all of the activations in the product key. But...

a) Why are you doing that? It sounds like revoking the key is a better usage.b) You shouldn't be calling any web API directly from within your app (or any program that an end-user has access to).

Thanks for your reply. I suppose I was asking if there is a function that is similar to how Adobe Creative Cloud or the iTunes authorization works when all activations have been used.

In some cases, I may want to activate my app on a new machine even though I've already used up all the activations on other machines. So, for example, with Adobe Creative Cloud asks me if I want to deactivate all the computers to proceed activating the new machine nowrather than having me go to a machine, deactivate, then trying again to activate on the new machine. If I click yes, the other machines get deactivated so I can activate on the new machine right away. I thought this may be possible with LimeLM, and it sounds like it is but with the webAPI.

I don't want to revoke the key manually, so I definitely want to do this in an automatic way.

As a side question, what is the difference between calling the C++ based API function IsGenuineEx() and calling a web-based API? IsGenuineEx() still hits connected servers and so does a web api call. So what is the essential difference? Is it the "hackability" of the web as opposed to a built binary based on C++ source?

Thanks again for your time and help! So far, I'm finding LimeLM to be the best solution out there for my product!

--Arie

I thought this may be possible with LimeLM, and it sounds like it is but with the webAPI.

It is. How you'd do it is when the customer clicks "Deactivate all computers" (or however you want to present it to them). You'd submit the product key to a script on your website, and then that script would call these functions using that product key to remotely-deactivate all the computers:

  1. http://wyday.com/limelm/help/api/limelm.pkey.getID/
  2. http://wyday.com/limelm/help/api/limelm.pkey.getDetails/
  3. http://wyday.com/limelm/help/api/limelm.pkey.deactivate/

Note: I would not recommend remotely deactivating all activaitons in a product key. It opens you up to abuse (because a customer could remotely deactivate all activations and then still continue to use your app on those computers for at least 1 day, while also using your app on other computers). So, if you do allow it, I would recommend limiting it using the deactivation limits.

Or, just not do it, and instead require the customer to deactivate on the actual computers (using the TurboActivate deactivate() function). Or just require them to buy additional activation slots.

As a side question, what is the difference between calling the C++ based API function IsGenuineEx() and calling a web-based API?

A lot of things. But the reason we tell customers not to call the web API functions from within your app is because the API key that you have to pass in to use the web API functions is like a password to your LimeLM account. And thus if it's in your app, anyone can access it (and thus has at least limited access to your LimeLM account).

That's not true for any of the TurboActivate functions (because an API key is not passed to the servers).

Hey Sam,

Thanks for the advice. Another reason I'm asking is in the case where we allow a user to activate on a virtual machine, let's say a EC2 instance on AWS, and then they kill the instance without having first deactivated our app. Then, later on they spin up a new instance that runs our app, but now they cannot activate because they are unable to deactivate the previously killed EC2 instance without having first deactivated. Is there a best practice to handle something like this? We don't want to support customers who "forgot" to deactivate.

What are your thoughts on that?

Thanks again for your time!

Arie

For cases like that we just recommend the customers use TurboFloat. TurboFloat handles Virtual Machines with ease. See:

http://wyday.com/limelm/help/vm-hypervisor-licensing/

http://wyday.com/limelm/help/using-turbofloat/