Não é possível instalar o Java 32 bits no Windows 7 de 64 bits

1

Estou baixando a versão java de 32 bits, do Java.com, http://java.com/en/download/manual.jsp . Salva como

jre-6u27-windows-i586-s

No entanto, quando eu instalo, em vez disso, a versão de 64 bits está instalada (??) . Não há javaw.exe na pasta / System32, mas existe na pasta SysWOW64.

Eu nunca tive esse problema antes. O que fazer? Eu preciso disso para programas java de 32 bits.

bretddog
fonte
O que você ganha quando vai para o CMD e digita java -version?
AndrejaKo
@AndrejaKo; Eu preciso ir para a pasta \ SysWOW64, então ele mostra (Java SE Runtime Environment construir 1.6.0_27-b07) e (Java Hotspot Client VM construir 20.2-b06, modo misto, compartilhamento). E de acordo com este teste: java.com/en/download/testjava.jsp , diz Arquitetura x86.
bretddog
1
"Eu preciso disso para programas Java de 32 bits" - Não existe tal coisa (a menos que você use JNI). "Um programa Java compilado pode ser executado em uma máquina virtual Java de 32 ou 64 bits sem modificação. Os comprimentos e a precisão de todos os tipos internos são especificados pelo padrão e não dependem da arquitetura subjacente. - oracle.com/technetwork/java/… e stackoverflow.com/questions/783662/…
RedGrittyBrick
@ Vermelho: Claro, isso é lógico. Embora eu tenha sido aconselhado a usar a versão de 32 bits para um programa específico, não sei o impacto que isso tem. Embora ainda exista o problema de que System32 / javaw.exe não existe e, portanto, os programas que fazem referência a ele não encontram nada.
bretddog

Respostas:

3

É exatamente onde ele pertence. De Wikipedia's WoW64 página:

O sistema operacional usa o diretório% SystemRoot% \ system32 para sua biblioteca de 64 bits e arquivos executáveis. Isso é feito por motivos de compatibilidade com versões anteriores, pois muitos aplicativos legados são codificados para usar esse caminho. Ao executar aplicativos de 32 bits, o WoW64 redireciona de forma transparente as DLLs de 32 bits para% SystemRoot% \ SysWOW64, que contém bibliotecas e executáveis ​​de 32 bits. Aplicativos de 32 bits geralmente não estão cientes de que estão executando em um sistema operacional de 64 bits. Aplicativos de 32 bits podem acessar% SystemRoot% \ System32 através do pseudo diretório% SystemRoot% \ sysnative.

Hand-E-Food
fonte
Obrigado, isso tornou um pouco mais claro! Mas um programa referenciando /System32/javaw.exe em seu link de destino simplesmente falhará ao iniciar. Esse comportamento é correto? Não vejo nenhum redirecionamento acontecendo.
bretddog
Eu prefácio isso dizendo que eu não conheço Java bem. Se você instalar a versão de 64 bits do Java, ela deverá ser executada corretamente porque estará em C: \ Windows \ System32. A menos que o código java chame DLLs de 32 bits, ele deve compilar e executar bem em um ambiente de 64 bits.
Hand-E-Food
Bem, esta é a coisa estranha que eu notei na minha pergunta: Não há arquivos java em / System32. Ainda acho que eu instalei 32bit, pelo menos de acordo com o teste aqui, ele diz x86 java.com/en/download/testjava.jsp Mas os arquivos java estão na pasta SysWOW64.
bretddog
Sim. Em um sistema operacional de 64 bits, o Java de 32 bits é instalado em \ SysWOW64 e o Java de 64 bits é instalado em \ System32. Em um sistema operacional de 32 bits, o Java de 32 bits é instalado em \ System32 e o Java de 64 bits não é instalado. Use a versão adequada ao sistema operacional e isso deve funcionar para você.
Hand-E-Food
1

Por que dlls de 64 bits vão para dlls System32 e 32bit para SysWoW64 no Windows de 64 bits?

Pelo que entendi, em um sistema Windows de 64 bits, o System32 é reservado para binários de 64 bits. Portanto, seria errado colocar um binário javaw.exe de 32 bits lá.

Programas que precisam invocar programas Java não devem ter a localização do javaw.exe codificada neles, eles devem confiar no PATH.

Como executar um programa em Java a partir de C #?

RedGrittyBrick
fonte