2010-01-05 88 views
24

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

问题是,在我的机器上我安装了64位版本的JRE,并且java.exe仅可用于C:\Windows\System32文件夹(x64)。我试图通过调用C:\Windows\System32\cmd.exe开始64位版本cmd.exe的明确尝试,但由于调用进程是32位,它被重定向到SysWOW64

还有什么我可以做得到这个工作?

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

+0

这个答案可能会带来更多的光线进入这件事情:http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection – 2014-10-23 09:42:35

+0

这个答案可能有所帮助:http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection – 2014-10-23 09:45:50

回答

28

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

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

+0

听起来很可怕,我会给它一个去: ) – 2010-01-05 01:59:09

+0

确实有效。我不能相信这是这样做的官方方式 - http://msdn.microsoft.com/en-us/library/aa365743%28VS.85%29.aspx - MSDN演示使用此功能,正是为了这个目的。 – 2010-01-05 02:07:28

+0

很酷,系统性也起作用,我可能会在最终版本中使用它。 – 2010-01-05 02:17:03

9

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

+1

非常感谢!为了进一步澄清用途:C:\ Windows \ Sysnative \ cmd.exe将在没有重定向的情况下运行C:\ Windows \ System32中的有效内容。更多信息:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm – 2014-07-28 16:07:20

+0

sysnative-Folder不在Windows10中存在 – MHolzmayr 2016-10-07 08:51:38

+0

也不是Windows 7或8.1 – 2016-11-16 10:07:37

2
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:\> 
相关问题