Como posso executar um exe no modo de 32 bits em uma máquina de 64 bits?


18

Eu tenho um executável que funciona bem quando executado em janelas de 32 bits, mas quebras quando executado em janelas de 64 bits.

Existe alguma maneira de forçá-lo a executar no modo de 32 bits em uma máquina de 64 bits?

Eu não tenho acesso ao código fonte.


Isso não faz muito sentido. A menos que o software tenha algum código que o faça explicitamente falhar, se não for executado em uma máquina de 64 bits. 32 bits funciona bem em 64 bits, a questão vem ao contrário (executando 64 bits em 32 bits). Você recebeu uma mensagem de erro?
Dave

3
É este código que você escreveu (nesse caso, o Stack Overflow é o lugar para perguntar - com o código e as mensagens de erro) ou é o programa de outra pessoa que você está executando? Seria bom se você incluísse alguma mensagem de erro que estivesse recebendo.
ChrisF

Respostas:


16

Quão técnica é a resposta que você deseja? Provavelmente, você pode forçar o exe a sempre executar 32 bits com algumas ferramentas SDK, mas isso requer um pouco de trabalho.

A resposta fácil é iniciar a partir de um processo de 32 bits (por exemplo, use %SystemRoot%\SYSWOW64\cmd.exeto launch).

O mais complexo é verificar que tipo de exe é e modificá-lo você mesmo. O plano de fundo aqui é entender que o código compilado de idiomas que trabalham diretamente com as APIs do Windows é criado como 32 bits ou 64 bits em tempo de compilação pelo desenvolvedor. Isso não pode ser alterado sem voltar ao código fonte.

No entanto, cada vez mais os aplicativos são gravados por meio de uma camada de virtualização que facilita a gravação dos aplicativos. Existem dois comuns: .NET e Java. Não tenho certeza sobre Java, exceto sabendo que forçar a instalação correta do Java Runtime resolve o problema.

Para .NET, você pode usar as ferramentas do SDK para:

  • Validar que a aplicação é "AnyCPU": corflags myExe.exe. Usando um utilitário do .NET SDK para ler os cabeçalhos de um assembly .NET, um exe retornará algo como:
Versão: v4.0.30319
Cabeçalho do CLR: 2,5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
Assinado: 0

o 32BITREQme diz que isso ocorre AnyCPUporque 32 bits não é necessário.

  • Use corflagscom sua /32BITREQ+opção para modificar o exe para ser apenas de 32 bits.

+1 A configuração .Net AnyCPU foi o meu primeiro pensamento. Basta um programador inconsciente para não especificar essa configuração corretamente. É ótimo saber que há uma maneira de corrigi-lo depois de compilado.
Hand-E-Food

2
Eu tentei iniciá-lo a partir %SystemRoot%\SYSWOW64\cmd.exee ele falhou no mesmo caminho - mostrando uma mensagem de erro - e quando eu check-in TaskManager meu processo de exe não mostra como um processo de 32 bits
Rory

1
Como Dave perguntou acima, que mensagem de erro exata você recebe?
27412 Karan

5
Iniciar um AnyCPU EXE gerenciado SYSWOW64\cmd.exeainda faz com que seja executado como um processo de 64 bits (eu apenas tentei).
Carl Walsh

3

Se você possui o Windows 7 Professional (ou superior), use o modo XP virtual da Microsoft

isso emula (?) um ambiente de 32 bits e provou ser útil para a execução de alguns programas antigos de 16 bits


0

Tentei de tudo e nada funcionou. mas depois pensei em mover o diretório gta iv dos arquivos de programa C / (x86) para arquivos de programa C / e ele funciona, pois o x86 é para aplicativos de 32 bits (eu acho), mas funcionou de qualquer maneira.


0

Na verdade, existe uma maneira mais fácil de acomodar isso (não uma solução a longo prazo).

Solte o aplicativo "corflags.exe" na pasta \ windows \ system32. Abra uma linha de comando como administrador e digite ...

corflags "caminho e nome do exe" / 32BITPREF32 +

Isso forçará o aplicativo a executar como um processo de 32 bits em vez de 64 bits.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.