Installed packages are stored with uninstall IDs

It will either take the IDs from the installer in the manifest or from the registry (if only one change is detected).
I think the diff stuff should move to it's own class. something like this,

void InstallTracker.TakeSnapshot();
string GetInstalledProductId();