Our Files In Use code during install and patch in place does not find processes started with short paths or alternate paths that do not exactly match the full installation directory.
For example, a process started with the path C:\Progra~1\Java\jre6\bin will not match C:\Program Files\Java\jre6\bin.
See the attached screen capture of the files in use dialog and the processes in Process Explorer.
In order to minimize risk of regression, GetFullPathName() was implemented in FilesInUse::ListProcessExePath().
I think the fix is to do what we're currently doing, but also use the ::GetShortPathName() function to detect if any of the shortpath's match up.