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 é.

Foi útil?

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?) ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top