There is a bug in MSI, where when it goes to delete each of our JRE files, it scans all processes to see which processes are using any files of the same name.
The bigger problem is specifically with msvcr71.dll MSI goes to remove this in the jre/bin directory, and it also notices other random processes are using the same file (though their own copy). So sometimes our uninstaller will ask users to showdown many apps that Java isn't even using, because these apps also use msvcr71.dll.
I believe the one fix would be to individually add files to the RemoveFile table for the jre/bin directory, and specifically leave out msvcr71.dll. Then we'll need to manually remove it in the UninstallJRE function in RegUtils.dll. Though this isn't really an elegant solution.
Another approach to this problem would be to not use the RemoveFile table anymore, and use our new FilesInUse.cpp native win32 dialog. We'd also have to do all of the removing of the JRE files ourselves. This is probably the better solution.