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

问题是我的机器上安装了 64 位版本的 JRE,而 java.exe 只能从 C:\Windows\System32 文件夹 (x64)。我已经尝试明确启动 64 位版本 cmd.exe 通过致电 C:\Windows\System32\cmd.exe 但它被重定向到 SysWOW64 由于调用进程是32位的。

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

编辑 整体 cmd /c 事情有点转移注意力。这不是问题的一部分,能够运行 64 位可执行文件才是问题的一部分。

有帮助吗?

解决方案

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

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

其他提示

您要做的就是使用%WINDIR%\ sysnative解决64位CMD.EXE,然后你通过“/ C”命令行选项。

启动您的其他64位程序
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:\>

以防万一这可能帮助.. http://msdn.microsoft.com/en-us /library/aa384187(VS.85).aspx

请注意,如果应用程序表现展现UAC提示,然后重定向将不会发生。也有一些文件夹重定向从免除。

“sysnative” 似乎有一些缺点。

实施例: 当你开始通过C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe powershell.exe像Get-AppxProvisionedPackage" and "Get-WindowsCapability某些cmdlet不工作/抛出异常:

  

GET-AppxProvisionedPackage:“错误设置当前目录   “C:\ WINDOWS \ SysNative \ WindowsPowerShell \ V1.0”:路径的一部分   “C:\的Windows \ SysNative \ WindowsPowerShell \ V1.0” 找不到“

     

(来自德国的“Fehler BEIM Festlegen DES aktuellen翻译   Verzeichnisses AUF “C:\ WINDOWS \ \ V1.0 SysNative \ WindowsPowerShell”:艾因   TEIL DES Pfades “C:\ WINDOWS \ SysNative \ WindowsPowerShell \ V1.0” konnte   nicht gefunden werden。“)

有可能是运行比的powershell其他进程(每当处理源目录是重要吗?)...

类似的问题
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top