.net - todos - Cómo iniciar un proceso de 64 bits desde un proceso de 32 bits
instalar windows 7 64 bits desde usb (4)
Estoy intentando ejecutar un ejecutable de 64 bits (java.exe) desde nuestra aplicación .NET de 32 bits. Estoy usando la clase de Process
e invocando cmd /c <command name>
para admitir todos los comandos posibles (como dir
, cd
, etc.).
El problema es que en mi máquina instalé la versión de 64 bits de JRE y java.exe solo está disponible en la carpeta C:/Windows/System32
(x64). He intentado iniciar explícitamente la versión de 64 bits de cmd.exe
llamando a C:/Windows/System32/cmd.exe
pero se redirige a SysWOW64
debido a que el proceso de llamada es de 32 bits.
¿Hay algo más que pueda hacer para que esto funcione?
EDITAR Toda la cosa de cmd /c
es un poco de una pista falsa. No es parte del problema, ser capaz de ejecutar ejecutables de 64 bits es.
En caso de que esto pueda ayudar ... http://msdn.microsoft.com/en-us/library/aa384187(VS.85).aspx
Tenga en cuenta que si la aplicación se manifiesta para mostrar el indicador de UAC, la redirección no se realizará. Y también algunas carpetas están exentas de redirección.
Lo que hace es usar% windir% / sysnative para resolver CMD.EXE de 64 bits y luego iniciar su otro programa de 64 bits mediante la opción de línea de comandos "/ c".
Puede deshabilitar temporalmente la redirección del sistema de archivos alrededor de la llamada a Process.Start, las API apropiadas para P / Invoke son Wow64DisableWow64FsRedirection y Wow64RevertWow64FsRedirection .
Otra opción es usar% windir% / sysnative, que está disponible en Windows Vista y superior.
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:/>