Migrating from VS 2008 to 2010

I have a serious issue that I'm encountering and I hope you can help. It may affect all my customers who are trying to upgrade my app.

Previously I was using VS 2008 to compile my app (it's a C++ app), and I was using the TurboActivate dll. Now I've started using VS 2010 so that I can link with the TurboActivate static library.

On all of my Windows 7 testing machines, I had previously activated the version of my app which was compiled using 2008 and the dll.

When I try to run the version of my app which was compiled using 2010 and the static lib, activation always fails on those same Windows 7 machines. I simply can't get it to work. Note that I'm using IsGenuineEx, which I wasn't using before.

Is there something obvious you can think of that might not work properly in going from 2008+dll to 2010+static? Or please let me know what more specific info I can provide.

Thanks.

P.S. The problem seems to be with the IsGenuineEx function. If I don't use that to check for activation, but rather use IsActivated, everything works properly.

If IsGenuineEx fails, but IsActivated succeeds, am I supposed to Deactivate before allowing the user to enter a new product key?

Ok, never mind my first post. I don't think the VS version has anything to do with it.

So my second post is really what I'm wondering about. It does seem like I have to specifically call Deactivate if IsGenuineEx fails, but IsActivated succeeds, and I want to allow the user to enter a new product key. Is this the intended behavior?

If IsGenuineEx fails, but IsActivated succeeds, am I supposed to Deactivate before allowing the user to enter a new product key?

IsGenuineEx() is returning TA_FAIL because it's been more than X days between last checking with the LimeLM servers, and the IsGenuineEx() call is failing to contact the servers (if you called IsGenuine() you'd see TA_E_INET).

When moving from TA 3.2.2 to TA 3.3.3 (presuming you listened to and accounted for the breaking changes) when you call IsGenuineEx() will require an immediately contacting LimeLM. Why? Because the TA 3.2.2 and below didn't include the signed timestamp data needed by IsGenuineEx() to see when it last contacted LimeLM.

Thus needing to contact LimeLM again immediately.

Does that make sense?

When I say "IsGenuineEx fails", I don't mean that the server wasn't contacted. I mean that the product key is not genuine.

So, to summarize:- App was previously activated, so IsActivated succeeds.- But, the product key was deactivated via the LimeLM web site.

Therefore, to enter a new product key, I must first Deactivate. Correct?

Yes, the customer has to deactivate before entering a new key. You can either do this remotely and have your app call IsGenuine(). Or you can call Deactivate().

So are you saying that if IsGenuine or IsGenuineEx returns a failure code, it will have deactivated the app? In other words, a subsequent call to Deactivate is not necessary?

If IsGenuine() returns a TA_FAIL then, yes, you'll be deactivated. If IsGenuineEx() returns TA_FAIL then *maybe* you'll be deactivated. Unless it's just a failure to connect to the internet, in which cases the next time IsGenuineEx() connects to LimeLM, and the activation is successfully validated, then IsGenuineEx() will return TA_OK / TA_E_FEATURES_CHANGED.

Short answer: either use IsActivate() or IsGenuineEx() don't use them both. And if IsGenuineEx() returns TA_FAIL then just enter the "trial mode" or disable your app.

Right now, I have a valid internet connection, and IsGenuineEx is returning TA_FAIL (as it should, because I've deactivated the product key). However, my app is not being deactivated. This seems to contradict what you stated above. I'm confused.

However, my app is not being deactivated. This seems to contradict what you stated above.

If it's returning TA_FAIL then you need to handle that case and disable the features of your app. Does that make sense?

I understand that I need to handle TA_FAIL. But it seemed like you were saying that if IsGenuineEx returns false, the app would be deactivated. However, this is not the case.

I should add to the above that this is for the case where the internet connection is working properly and TA_FAIL is returned.

But it seemed like you were saying that if IsGenuineEx returns false, the app would be deactivated. However, this is not the case.

Ok, I understand what you're saying. If you're past the "grace period" you passed to IsGenuineEx() and you're not connected to the internet then it will return TA_FAIL (and IsActivated() will still return TA_OK). Then, if you plug the internet back in, IsGenuineEx() will still return TA_FAIL for the next 5 hours.

Does that make sense?

So there are a few cases where IsGenuineEx() will return TA_FAIL without "deactivating" the computer. That's why we suggest IsGenuineEx() as a complete replacement to IsActivated().