2010-01-05 2 views
24

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

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

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

EDIT Все cmd /c вещь немного красная сельдь. Он не является частью проблемы, поскольку он способен запускать 64-разрядные исполняемые файлы.

+0

Этот ответ может принести больше света в этом вопросе: http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection –

+0

Этот ответ может помочь: http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection –

ответ

28

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

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

+0

Звучит страшно, я дам ему ход:) –

+0

Действительно, это работает. Я не могу поверить, что это официальный способ сделать это - http://msdn.microsoft.com/en-us/library/aa365743%28VS.85%29.aspx - MSDN демонстрирует использование этой функции именно для этой цели. –

+0

Прохладный, sysnative работал тоже, я, вероятно, буду использовать это в финальной версии. –

2

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

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

9

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

+1

Спасибо большое! Для дальнейшего уточнения использования: C: \ Windows \ Sysnative \ cmd.exe будет запускать то, что эффективно находится в C: \ Windows \ System32 без перенаправления. Дополнительная информация: http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm –

+0

sysnative-Folder нет в Windows10 – MHolzmayr

+0

Nor Windows 7 или 8.1 –

2
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:\> 
Смежные вопросы