Como para iniciar um processo de 64 bits a partir de um processo de 32 bits
-
18-09-2019 - |
Pergunta
Eu estou tentando executar um executável de 64 bits (java.exe) do nosso aplicativo .NET de 32 bits. Eu estou usando a classe Process
e invocando cmd /c <command name>
a fim de apoiar todos os comandos possíveis (como dir
, cd
etc).
O problema é que na minha máquina eu instalei versão do JRE de 64 bits e java.exe só está disponível na pasta C:\Windows\System32
(x64). Eu tentei explicily começando versão de 64 bits do cmd.exe
chamando C:\Windows\System32\cmd.exe
mas será redirecionado para SysWOW64
devido ao processo de chamada sendo 32 bit.
É mais lá qualquer coisa que eu possa fazer para chegar a este trabalho?
Editar A coisa toda cmd /c
é um pouco de um arenque vermelho. Não é parte do problema, sendo capaz de executar 64 executáveis ??bit é.
Solução
Você pode desativar temporariamente o redirecionamento de sistema de arquivos em torno da chamada para Process.Start, da API apropriada para P / Invoke são Wow64DisableWow64FsRedirection e Wow64RevertWow64FsRedirection .
Outra opção é usar% windir% \ sysnative, que está disponível no Windows Vista e acima.
Outras dicas
O que você faz é usar% windir% \ sysnative para resolver de 64 bits CMD.EXE e depois de lançar o seu programa de outro 64-bit através da opção de linha de comando "/ c".
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:\>
Apenas no caso de isso pode ajudar .. http://msdn.microsoft.com/en-us /library/aa384187(VS.85).aspx
Note que, se a aplicação é manifestada para mostrar o UAC alerta, em seguida, o redirecionamento não ocorrerá. E também algumas pastas estão isentos de redirecionamento.
"sysnative" parece ter alguns inconvenientes.
Exemplo:
Quando você começar a powershell.exe via C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe
Alguns cmdlets como Get-AppxProvisionedPackage" and "Get-WindowsCapability
não funcionam / exceções lance:
Get-AppxProvisionedPackage: "Erro ao definir diretório atual para "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0": parte do caminho "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0" não pôde ser encontrado "
(traduzido do alemão "Fehler beim festlegen des aktuellen Verzeichnisses auf "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0": Ein Teil des Pfades "C: \ Windows \ SysNative \ WindowsPowerShell \ v1.0" könnte nicht gefunden werden. ")
Pode haver problemas semelhantes executando outros processos do que PowerShell (sempre que o diretório de origem processo é importante?) ...