Program B execute a PDetsFromPath and an isActivated every 5 seconds.
Why are you calling IsActivated() every 5 seconds? That seems a bit excessive. Why not just refresh the value after your other process calls Activate()?
Program B keeps getting old activation data and doens't see the reactivation that program A executed.
You mean the feature data? It's cached per-process the first time you call GetFeatureValue(...). If you want we can modify the behavior to clear the cache and get the new values after another process re-activates. Is this what you want?
I need to close and open again Program B to see the new activation data (and this is scaring me because if i will close program b will it flush the data to the TurboActivate files?)
That won't happen.