2010-01-05 165 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:\> 
相關問題