如何从 32 位进程启动 64 位进程
-
18-09-2019 - |
题
我正在尝试从 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其他进程(每当处理源目录是重要吗?)...
类似的问题