After some searching, I found this solution. It has methods for mac/unix/windows. It uses java.awt.Desktop when it can (indeed using reflection, so java6 is not required), but falls back to other methods. On windows, rundll32.exe is used to prevent the need for native code. We need to test on 64bit windows. Is there a rundll64 equivalent? Should we prefer this on 64bit windows, in case rundll32 dissapears in the future.