如何从32位进程启动64位进程

Igo*_*aka 30 .net process syswow64 32bit-64bit

我试图从我们的32位.NET应用程序运行64位可执行文件(java.exe).我正在使用Process类和调用cmd /c <command name>以支持所有可能的命令(如dir,cd等).

问题是在我的机器上我安装了64位版本的JRE,而java.exe只能从C:\Windows\System32文件夹(x64)中获得.我已经尝试cmd.exe通过调用显然启动64位版本C:\Windows\System32\cmd.exeSysWOW64由于调用进程为32位而被重定向到.

我还能做些什么才能让它发挥作用吗?

编辑整个cmd /c事情是一个红色的鲱鱼.它不是问题的一部分,能够运行64位可执行文件.

Mic*_*ael 34

您可以在调用Process.Start时暂时禁用文件系统重定向,P/Invoke的相应API是Wow64DisableWow64FsRedirectionWow64RevertWow64FsRedirection.

另一种选择是使用%windir%\ sysnative,它可以在Windows Vista及更高版本上使用.

  • 可能值得注意的是,`sysnative` 仅适用于 32 位进程。如果您的进程是 64 位,您将收到文件未找到异常。所以无论如何你必须在访问`sysnative`之前检查你的位数,这是一种耻辱,因为如果它解析到同一个文件夹而不管你自己的位数会更好。 (3认同)

小智 12

你要做的是使用%windir%\ sysnative来解析64位CMD.EXE,然后通过"/ c"命令行选项启动其他64位程序.

  • 多谢!为了进一步阐明使用:C:\Windows\Sysnative\cmd.exe 将运行 C:\Windows\System32 中有效的内容,而无需重定向。更多信息:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm (2认同)

Den*_*kem 5

c:\>set proc
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=4601

c:\>c:\windows\sysnative\cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\>set proc
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=4601

c:\>
Run Code Online (Sandbox Code Playgroud)