Как запустить 64-битный процесс из 32-битного процесса - PullRequest
30 голосов
/ 05 января 2010

Я пытаюсь запустить 64-разрядный исполняемый файл (java.exe) из нашего 32-разрядного приложения .NET. Я использую класс Process и вызываю cmd /c <command name> для поддержки всех возможных команд (например, dir, cd и т. Д.).

Проблема в том, что на моей машине я установил 64-битную версию JRE, а java.exe доступен только из папки C:\Windows\System32 (x64). Я попытался явно запустить 64-битную версию cmd.exe, вызвав C:\Windows\System32\cmd.exe, но он перенаправляется на SysWOW64 из-за 32-битного вызывающего процесса.

Есть ли что-нибудь еще, что я могу сделать, чтобы заставить это работать?

РЕДАКТИРОВАТЬ Вся вещь cmd /c является чем-то вроде красной сельди. Это не является частью проблемы, так как возможность запуска 64-битных исполняемых файлов есть.

Ответы [ 4 ]

34 голосов
/ 05 января 2010

Вы можете временно отключить перенаправление файловой системы вокруг вызова Process.Start, соответствующие API для P / Invoke Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection .

Другой вариант - использовать% windir% \ sysnative, который доступен в Windows Vista и выше.

12 голосов
/ 17 февраля 2014

Что вы делаете, вы используете% windir% \ sysnative для разрешения 64-битного CMD.EXE, а затем запускаете другую 64-битную программу с помощью параметра командной строки "/ c".

4 голосов
/ 21 мая 2016
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 голосов
/ 13 января 2010

На всякий случай это может помочь .. http://msdn.microsoft.com/en-us/library/aa384187(VS.85).aspx

Обратите внимание, что если приложение отображает приглашение UAC, перенаправление не будет выполнено. А также некоторые папки освобождены от перенаправления.

...