2010-01-05 3 views
24

Sto tentando di eseguire un eseguibile a 64 bit (java.exe) dalla nostra applicazione .NET a 32 bit. Sto usando la classe Process e invoco cmd /c <command name> per supportare tutti i comandi possibili (come dir, cd ecc.).Come avviare un processo a 64 bit da un processo a 32 bit

Il problema è che sulla mia macchina ho installato la versione a 64 bit di JRE e java.exe è disponibile solo dalla cartella C:\Windows\System32 (x64). Ho provato esplicitamente a iniziare la versione a 64 bit di cmd.exe chiamando C:\Windows\System32\cmd.exe ma viene reindirizzata a SysWOW64 a causa del processo di chiamata a 32 bit.

C'è altro che posso fare per farlo funzionare?

EDIT L'intera cmd /c è un po 'una falsa pista. Non fa parte del problema, essendo in grado di eseguire file eseguibili a 64 bit.

+0

Questa risposta potrebbe portare più luce in questa materia: http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection –

+0

Questa risposta potrebbe aiutare: http://stackoverflow.com/questions/9466850/the-specified-procedure-could-not-be-found-after-disabling-wow64-redirection –

risposta

28

È possibile disattivare temporaneamente il reindirizzamento del file system attorno alla chiamata a Process.Start, le API appropriate a P/Invoke sono Wow64DisableWow64FsRedirection e Wow64RevertWow64FsRedirection.

Un'altra opzione è utilizzare% windir% \ sysnative, che è disponibile su Windows Vista e versioni successive.

+0

Suoni spaventosi, darò una prova:) –

+0

Effettivamente questo funziona. Non posso credere che questo sia il modo ufficiale per farlo - http://msdn.microsoft.com/en-us/library/aa365743%28VS.85%29.aspx - MSDN dimostra di usare questa funzione proprio per questo scopo. –

+0

Cool, anche sysnative ha funzionato, probabilmente lo userò nella versione finale. –

9

Quello che si fa è utilizzare% windir% \ sysnative per risolvere CMD.EXE a 64 bit e quindi si avvia l'altro programma a 64 bit tramite l'opzione "/ c" della riga di comando.

+1

Grazie mille! Per chiarire ulteriormente l'uso: C: \ Windows \ Sysnative \ cmd.exe eseguirà ciò che è effettivamente in C: \ Windows \ System32 senza reindirizzamento. Ulteriori informazioni: http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm –

+0

sysnative-Folder non è presente in Windows10 – MHolzmayr

+0

Né Windows 7 o 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:\>