我正在尝试从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.exe
,但由于调用进程为32位,它被重定向到SysWOW64
。
我能做些什么来让它发挥作用吗?
编辑整个cmd /c
事情有点像红鲱鱼。这不是问题的一部分,能够运行64位可执行文件是。
答案 0 :(得分:34)
您可以暂时禁用围绕调用Process.Start的文件系统重定向,P / Invoke的相应API是Wow64DisableWow64FsRedirection和Wow64RevertWow64FsRedirection。
另一种选择是使用%windir%\ sysnative,它可以在Windows Vista及更高版本上使用。
答案 1 :(得分:12)
您所做的是使用%windir%\ sysnative来解析64位CMD.EXE,然后通过“/ c”命令行选项启动其他64位程序。
答案 2 :(得分:4)
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:\>
答案 3 :(得分:3)
以防万一这可能会有所帮助.. http://msdn.microsoft.com/en-us/library/aa384187(VS.85).aspx
请注意,如果显示应用程序以显示UAC提示,则不会进行重定向。还有一些文件夹可以免于重定向。
答案 4 :(得分:0)
这是在cmd窗口内切换到64位cmd的一种方法,以防您发现自己是32位版本:
if %PROCESSOR_ARCHITECTURE%==x86 %windir%\sysnative\cmd
或者有条件从32位批处理进程中以64位执行:
if %PROCESSOR_ARCHITECTURE%==x86 "%windir%\sysnative\cmd" /c "someProgram"
甚至更好:
set "commands=multiple commands & to execute"
if %PROCESSOR_ARCHITECTURE%==x86 ( "%windir%\sysnative\cmd" /c "%commands%" ) else ( %commands% )
答案 5 :(得分:0)
要通过 64 位 cmd.exe 运行进程/脚本,您可以使用:
%windir%\SysWOW64\cmd.exe /c %windir%\sysnative\cmd.exe /c ProgramToRun parameters
此解决方案普遍适用于 32 位和 64 位进程。
附注
%windir%\sysnative 仅存在于 32 位进程中。
%windir%\SysWOW64 存在于 32 位和 64 位进程中。
答案 6 :(得分:-1)
“系统”似乎有一些缺点。
示例:
当您通过C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe
启动powershell.exe时,某些Get-AppxProvisionedPackage" and "Get-WindowsCapability
之类的CmdLets不起作用/抛出异常:
Get-AppxProvisionedPackage:“将当前目录设置为错误 “ C:\ Windows \ SysNative \ WindowsPowerShell \ v1.0”:部分路径 找不到“ C:\ Windows \ SysNative \ WindowsPowerShell \ v1.0”
(翻译自德语“ Fehler beim Festlegen des aktuellen 版本“ C:\ Windows \ SysNative \ WindowsPowerShell \ v1.0”:Ein Teil des Pfades“ C:\ Windows \ SysNative \ WindowsPowerShell \ v1.0” nicht gefunden werden。”)
运行除powershell之外的其他进程可能会遇到类似的问题(何时进程源目录重要?)...