Domanda

Sto cercando di eseguire un file eseguibile a 64 bit (java.exe) dalla nostra applicazione .NET a 32 bit. Sto usando classe Process e cmd /c <command name> invocando al fine di sostenere tutti i comandi possibili (come dir, cd ecc).

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 explicily di partenza la versione a 64 bit di cmd.exe chiamando C:\Windows\System32\cmd.exe ma viene reindirizzato a SysWOW64 grazie al processo di chiamare sia a 32 bit.

C'è qualcos'altro che posso fare per ottenere questo lavoro?

Modifica Il tutto cmd /c è un po 'di una falsa pista. Non è parte del problema, essendo in grado di funzionare a 64 bit eseguibili è.

È stato utile?

Soluzione

È possibile disabilitare temporaneamente il reindirizzamento filesystem intorno la chiamata alla Process.Start, le API appropriate di a P / Invoke sono Wow64DisableWow64FsRedirection e Wow64RevertWow64FsRedirection .

Un'altra opzione è quella di utilizzare% windir% \ sysnative, che è disponibile su Windows Vista e sopra.

Altri suggerimenti

Quello che fate è si utilizza% windir% \ sysnative per risolvere 64 bit cmd.exe e quindi si avvia il vostro altro programma a 64 bit tramite "/ c" linea di comando.

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:\>

Nel caso in cui questo potrebbe aiutare .. http://msdn.microsoft.com/en-us /library/aa384187(VS.85).aspx

Si noti che se l'applicazione si manifesta per mostrare il prompt UAC, quindi il reindirizzamento non sarà effettuata. E anche alcune cartelle sono esenti da reindirizzamento.

"sysnative" sembra avere alcuni svantaggi.

Esempio: Quando si avvia powershell.exe via C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe Alcuni cmdlet come Get-AppxProvisionedPackage" and "Get-WindowsCapability non funzionano / generare eccezioni:

  

Get-AppxProvisionedPackage: "Errore impostazione directory corrente   "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0": parte del percorso   "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0" non è stato trovato "

     

(tradotto dal tedesco "Fehler beim Festlegen des aktuellen   Verzeichnisses auf "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0": Ein   Teil des Pfades "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0" konnte   nicht gefunden werden. ")

Ci potrebbero essere problemi simili in esecuzione altri processi di PowerShell (ogni volta che la directory di origine processo è importante?) ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top