How to start a 64-bit process from a 32-bit process

.net, 32bit-64bit, process, syswow64

Solution

You can temporarily disable filesystem redirection around the call to Process.Start, the appropriate API's to P/Invoke are Wow64DisableWow64FsRedirection and Wow64RevertWow64FsRedirection.

Another option is to use %windir%\sysnative, which is available on Windows Vista and above.

Problem

I am trying to run a 64 bit executable (java.exe) from our 32-bit .NET application. I am using `Process` class and invoking `cmd /c <command name>` in order to support all possible commands (like `dir`, `cd` etc). The problem is that on my machine I installed 64-bit version of JRE and java.exe is only available from `C:\Windows\System32` folder (x64). I have tried explicily starting 64 bit version of `cmd.exe` by calling `C:\Windows\System32\cmd.exe` but it gets redirected to `SysWOW64` due to calling process being 32 bit. Is there anything else I can do to get this to work? EDIT The whole `cmd /c` thing is a bit of a red herring. It is not part of the problem, being able to run 64 bit executables is.

Original source