Come posso eseguire un exe in modalità 32 bit su un computer a 64 bit?


18

Ho un eseguibile che funziona bene quando viene eseguito su Windows a 32 bit ma si interrompe quando viene eseguito su Windows a 64 bit.

C'è un modo per forzarlo a funzionare in modalità a 32 bit su una macchina a 64 bit?

Non ho accesso al codice sorgente.


Questo non ha molto senso. A meno che il software non abbia del codice che lo fa esplicitamente fallire se non eseguito su una macchina a 64 bit. 32 bit funziona benissimo a 64 bit, il problema si presenta al contrario (con 64 bit a 32 bit). Hai ricevuto un messaggio di errore?
Dave,

3
È questo codice che hai scritto (nel qual caso Stack Overflow è il posto dove chiedere - con il codice e i messaggi di errore), oppure è il programma di qualcun altro che stai eseguendo? Sarebbe utile se includessi tutti i messaggi di errore che ricevi.
ChrisF,

Risposte:


16

Quanto tecnica vuoi una risposta? Probabilmente puoi forzare l'exe a eseguire sempre 32 bit con alcuni strumenti SDK, ma richiede un po 'di lavoro.

La risposta semplice è lanciare da un processo a 32 bit (es. Usare %SystemRoot%\SYSWOW64\cmd.exeper avviare).

Il più complesso è controllare che tipo di exe sia, quindi modificarlo da soli. Lo sfondo qui è capire che il codice compilato da linguaggi che funzionano direttamente con le API di Windows vengono creati come sviluppatore a 32 bit o 64 bit al momento della compilazione. Questo non può quindi essere modificato senza tornare al codice sorgente.

Tuttavia, sempre più applicazioni vengono scritte tramite un livello di virtualizzazione che semplifica la scrittura di applicazioni. Ce ne sono due comuni: .NET e Java. Non sono sicuro di Java se non sapendo che forzare l'installazione corretta del runtime Java con risolvere il problema.

Per .NET è possibile utilizzare gli strumenti SDK per:

  • Convalida che l'applicazione è "AnyCPU": corflags myExe.exe. Utilizzando un'utilità da .NET SDK per leggere le intestazioni di un assembly .NET, per un exe verrà restituito qualcosa del tipo:
Versione: v4.0.30319
Intestazione CLR: 2.5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32 BITPREF: 1
Firmato: 0

la 32BITREQmi dice questo è AnyCPUperché a 32 bit non è necessaria.

  • Utilizzare corflagscon la sua /32BITREQ+opzione per modificare exe solo a 32 bit.

+1 L'impostazione .Net AnyCPU è stata la mia prima idea. È sufficiente che un programmatore ignaro non specifichi correttamente questa impostazione. È bello sapere che esiste un modo per risolverlo dopo che è stato compilato.
Hand-E-Food,

2
Ho provato ad avviarlo da %SystemRoot%\SYSWOW64\cmd.exee non è riuscito allo stesso modo - mostrando un messaggio di errore - e quando controllo TaskManager il mio processo exe non viene visualizzato come processo a 32 bit
Rory

1
Come Dave ha chiesto sopra, quale messaggio di errore esatto ricevi?
Karan,

5
L'avvio di un AnyCPU EXE gestito da SYSWOW64\cmd.exefa comunque sì che venga eseguito come processo a 64 bit (l'ho appena provato).
Carl Walsh,

3

Se hai Windows 7 Professional (o versioni successive), utilizza la modalità XP virtuale di Microsoft

questo emula (?) un ambiente a 32 bit e si è rivelato utile per far funzionare alcuni vecchi programmi a 16 bit


0

Ho provato tutto e niente ha funzionato. ma poi ho pensato di spostare la directory gta iv dai file C / program (x86) ai file C / program e funziona dal momento che x86 è per app a 32 bit (credo) ma ha funzionato comunque.


0

In realtà c'è un modo più semplice per soddisfare questo (non una soluzione a lungo termine).

Rilasciare l'applicazione "corflags.exe" nella cartella \ windows \ system32. Apri una riga di comando come amministratore e digita ...

corflags "percorso e nome dell'esempio" / 32BITPREF32 +

Ciò costringerà l'esecuzione dell'applicazione come processo a 32 bit anziché a 64 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.