Currently, we're checking the JRE version string to determine whether to unregister the ssvagent.exe and jp2launcher.exe. This is not robust enough as the JRE version can be changed from time to time. For example, the 6u5 was changed to 6u10.
According to ###@###.###:
The use of the version string in src/plugin/win32/regutils/RegInstall.cpp to determine when to unregister ssvagent.exe is problematic. By luck, we haven't yet updated the same code in the 6u10 workspace, but think about what would happen if we had and then forgot to update it after this bug fix. Install 6u5, which installs and registers ssvagent.exe. Install 6u10. Uninstall 6u10. The code in the 6u10 uninstaller thinks "the latest available JRE is 1.6.0_05, which is earlier than 1.6.0_10, so I'll unregister ssvagent.exe". Now the 1.6.0_05 ssvagent.exe isn't installed as a broker process any more and the user starts getting security dialogs when they open up IE on Vista.
The heuristics in the installer should be updated to test for the presence of files like ssvagent.exe, ssv.dll, etc. in the latest installed JRE using _stat() when making determinations about whether to delete registry keys or update existing registry keys to point to the latest installed JRE during uninstallation.